gpt4 book ai didi

java - JMock 静态 Mockery 与本地 Mockery

转载 作者:行者123 更新时间:2023-11-30 06:23:11 27 4
gpt4 key购买 nike

我们有大量使用 JMock 2.5.1 编写的单元测试,其中大多数(全部?)使用本地 Mockery 对象,例如:

@RunWith(JMock.class)
public class SomeTestClass {

private Mockery context;

@Before
public void setUp() {
context = new Mockery();
}
}

我们决定升级到 JMock 2.8.3,以便我们可以使用新功能,例如线程安全模拟。然而,在 2.8.3 下运行现有的单元测试时,我得到:

Testcase: testReordering_GoingUp(com.hcs.orc.board.NameTagList2Test):   Caused an ERROR
Mockery named 'context' is null
java.lang.IllegalStateException: Mockery named 'context' is null
at org.jmock.integration.junit4.JMock.mockeryOf(JMock.java:67)
at org.jmock.integration.junit4.JMock.createTest(JMock.java:35)

看来JMock 2.8.3需要Mockery的静态版本。即:

@RunWith(JMock.class)
public class SomeTestClass {

public static Mockery context;

@BeforeClass
public static void globalSetUp() {
context = new Mockery();
}
}

但是,这会在测试之间的 Mockery 中造成溢出。也就是说,即使在测试后,之前创建的模拟对象仍然存在,导致错误,例如:

a mock with name fullScreenFrame already exists
java.lang.IllegalArgumentException: a mock with name fullScreenFrame already exists
at org.jmock.Mockery.mock(Mockery.java:128)
at org.jmock.Mockery.mock(Mockery.java:120)

有没有办法从 JMock 2.5.1 升级到 JMock 2.8.3,而无需返工 100 秒(1000 秒?)的单元测试?

注意: 进行编辑以反射(reflect)迁移到 JMock 2.8.3。尽管 jmock.org 的网站非常过时且缺乏维护,但 JMock 2.6.1 并不是最新的代码。

最佳答案

尝试删除 @RunWith(JMock.class) 注释 - 我相信 2.6.x 版本之一(以引入 JUnitRuleMockery 的版本为准)已弃用它。

除此之外,如果您愿意,您还可以使用注释来实例化您的模拟:

public class SomeTestClass {
@Rule
public JUnitRuleMockery context = new JUnitRuleMockery();

@Mock private SomeOtherClass mockedDependency;

}

关于java - JMock 静态 Mockery 与本地 Mockery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719072/

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