gpt4 book ai didi

java - jUnit 中的多个 RunWith 语句

转载 作者:IT老高 更新时间:2023-10-28 11:28:46 32 4
gpt4 key购买 nike

我编写单元测试并希望将 JUnitParamsRunnerMockitoJUnitRunner 用于一个测试类。

很遗憾,以下方法不起作用:

@RunWith(MockitoJUnitRunner.class)
@RunWith(JUnitParamsRunner.class)
public class DatabaseModelTest {
// some tests
}

有没有办法在一个测试类中同时使用 Mockito 和 JUnitParams?

最佳答案

您不能这样做,因为根据规范,您不能在同一个带注释的元素上两次放置相同的注释。

那么,解决方案是什么?解决方案是仅将一个 @RunWith() 与您无法忍受的运行者放在一起,并用其他东西替换另一个。在您的情况下,我猜您将删除 MockitoJUnitRunner 并以编程方式执行它的功能。

事实上它唯一能做的就是运行:

MockitoAnnotations.initMocks(test);

在测试用例的开头。所以,最简单的解决办法就是把这段代码放到 setUp() 方法中:

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}

我不确定,但可能您应该避免使用标志多次调用此方法:

private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}

不过更好的是,可以使用 JUnt 的规则来实现可重用的解决方案。

public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;

@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}

现在只需将以下行添加到您的测试类中:

@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();

你可以用任何你想要的运行器运行这个测试用例。

关于java - jUnit 中的多个 RunWith 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431427/

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