Java 使用EasyMock测试简单的多线程代码,但得到了奇怪的结果
我正在使用Java 使用EasyMock测试简单的多线程代码,但得到了奇怪的结果,java,multithreading,easymock,Java,Multithreading,Easymock,我正在使用EasyMock测试一个简单的多线程代码: 源代码: public class EasyMockTest { ExecutorService executorService; TestObject testObject; public EasyMockTest(ExecutorService executorService, TestObject testObject) { this.executorService = executo
EasyMock
测试一个简单的多线程代码:
源代码:
public class EasyMockTest {
ExecutorService executorService;
TestObject testObject;
public EasyMockTest(ExecutorService executorService, TestObject testObject)
{
this.executorService = executorService;
this.testObject = testObject;
}
public void test()
{
try
{
executorService.submit(() ->{
testObject.doSomething();
});
}
catch(RejectedExecutionException ex)
{
}
}
}
public class TestObject {
public void doSomething()
{
}
}
使用EasyMock测试代码:
public class EasyMockTest_test {
private TestObject testObject;
private ExecutorService executorService;
private EasyMockTest easyMockTest;
@Before
public void setUp()
{
executorService = new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(1));
testObject = EasyMock.createMock(TestObject.class);
easyMockTest = new EasyMockTest(executorService, testObject);
}
@Test
public void test_easyMockTest()
{
testObject.doSomething();
EasyMock.expectLastCall().andAnswer(new IAnswer<Void>(){
@Override
public Void answer() throws Throwable {
Thread.sleep(100);
return null;
}}).times(2);
EasyMock.replay(testObject);
easyMockTest.test();
easyMockTest.test();
easyMockTest.test();
EasyMock.verify(testObject);
}
}
此时间错误变为:
java.lang.AssertionError:验证时预期失败:
TestObject.doSomething():预期值:3,实际值:2
为什么我给它2的时候结果是3
抱歉,我不是EasyMock方面的专家,非常感谢有人能提供帮助。没有什么能确保在到达
验证之前执行您的任务。你需要一些东西来加快执行速度
这项工作:
@试验
public void test_easyMockTest()抛出InterruptedException{
倒计时闩锁=新倒计时闩锁(3)
testObject.doSomething();
EasyMock.expectLastCall()和answer(new IAnswer()){
@凌驾
公共无效答案()可丢弃{
倒计时();
返回null;
}}).次(2);
回放(testObject);
easyMockTest.test();
easyMockTest.test();
easyMockTest.test();
等待(1,时间单位秒);
验证(testObject);
}
在这里,我假设您真的希望捕获并忽略拒绝执行异常。是的,我稍后会找到原因。谢谢你建议倒计时!
EasyMock.expectLastCall().times(2).andAnswer(new IAnswer<Void>(){
@Override
public Void answer() throws Throwable {
Thread.sleep(100);
return null;
}});
testObject.doSomething();
EasyMock.expectLastCall().andAnswer(new IAnswer<Void>(){
@Override
public Void answer() throws Throwable {
latch.countDown();
return null;
}}).times(2);
EasyMock.replay(testObject);
easyMockTest.test();
easyMockTest.test();
easyMockTest.test();
latch.await(1, TimeUnit.SECONDS);
EasyMock.verify(testObject);