gpt4 book ai didi

easymock - 在套件测试期间 EasyMock 表示 0 个匹配器预期 1 个记录

转载 作者:行者123 更新时间:2023-12-02 17:18:32 26 4
gpt4 key购买 nike

所以我已经使用 EasyMock 的类扩展有一段时间了。突然间,我遇到了这个异常,但只有当我运行整个测试套件时:

java.lang.IllegalStateException: 0 matchers expected, 1 recorded.
at org.easymock.internal.ExpectedInvocation.createMissingMatchers(ExpectedInvocation.java:42)
at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:34)
at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:26)
at org.easymock.internal.RecordState.invoke(RecordState.java:64)
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:24)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:56)
at org.easymock.classextension.internal.ClassProxyFactory$1.intercept(ClassProxyFactory.java:74)
at com.protrade.soccersim.data.emulator.matrix.PositionCategoryMatrix$$EnhancerByCGLIB$$c5298a7.getPossession(<generated>)
at com.protrade.soccersim.data.emulator.stats.team.PossessionCalculatorUnitTest.testDeterminePossessionHomeWin(PossessionCalculatorUnitTest.java:45)

涉及的代码是这个小美人(稍微修剪一下):

    @Before
public void setUp() throws Exception {
homeTeam = createMock( PositionCategoryMatrix.class );
awayTeam = createMock( PositionCategoryMatrix.class );
...
}

@Test
public void testDeterminePossessionHomeWin() {
expect(homeTeam.getPossession()).andReturn( 0.15151515 );
expect(awayTeam.getPossession()).andReturn( 0.01515152 );
replay( homeTeam, awayTeam );
...
}

第一次期望时抛出异常。这确实没有意义。它说它正在获取一个匹配器,但该方法甚至不接受参数。奇怪的是,它只在测试套件期间出现!我正在 @Before 创建一个新的模拟,所以它不应该从其他地方继承任何东西(不是其他方法会有匹配器)

那么,有什么想法吗?

最佳答案

我厌倦了在我必须使用的 EasyMock 的每个新遗留代码库中看到这种情况。按书本编写一个新的 EasyMock 测试,突然随机测试开始失败,因为匹配器从未捕获。所以我去研究 EasyMock 如何存储这些匹配器。它使用了最终类 LastControl,在该类中是一些存储不同内容的线程局部变量。其中之一是给匹配者的。幸运的是,那里有一个静态方法可以从仍然在那里的线程本地中提取所有匹配器。所以这给了我这个想法(在同事的帮助下,谢谢斯文,他想要荣誉)

/**
* Base class to make sure all EasyMock matchers are cleaned up. This is not pretty but it will work
*
* @author N069261KDS
*
*/
public class BaseTest {

@Before
public void before(){
LastControl.pullMatchers();
}

@After
public void after(){
LastControl.pullMatchers();
}

}

基本上,让因匹配器错误而失败的测试从此类扩展,并且您将确保匹配器已清理。请注意,这是一个解决方法。有问题的测试一开始就应该写好。但如果您必须费力地通过 5000 多项测试,那么这是两害相权取其轻。我希望这能帮助人们!

关于easymock - 在套件测试期间 EasyMock 表示 0 个匹配器预期 1 个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com