在编写新的jUnit4测试时,我想知道是使用@runwith(MockitoJunitrunner.class)
还是MockitoAnnotations.initMocks(this)
。
我创建了一个新测试&向导自动用运行器生成了一个测试。用于MockitoJUnitRunner的Javadocs声明如下:
我不清楚使用Runner是否比我过去使用的initmocks()
方法有任何优势。
MockitoJunitRunner
为您提供了对框架使用情况的自动验证,以及一个自动的initMocks()
。
对框架使用的自动验证实际上是值得拥有的。如果你犯了这些错误之一,它会给你更好的报告。
>
调用静态when
方法,但不要使用匹配的thenreturn
、thenthrow
或then
完成stubbing。(下面代码中的错误1)
如果您没有对框架使用情况进行验证,这些错误直到下面调用Mockito方法时才会报告。这可能是
如果它们发生在您运行的最后一个测试中(如下面的错误3),则根本不会报告它们。
@Test
public void test1() {
// ERROR 1
// This compiles and runs, but it's an invalid use of the framework because
// Mockito is still waiting to find out what it should do when myMethod is called.
// But Mockito can't report it yet, because the call to thenReturn might
// be yet to happen.
when(myMock.method1());
doSomeTestingStuff();
// ERROR 1 is reported on the following line, even though it's not the line with
// the error.
verify(myMock).method2();
}
@Test
public void test2() {
doSomeTestingStuff();
// ERROR 2
// This compiles and runs, but it's an invalid use of the framework because
// Mockito doesn't know what method call to verify. But Mockito can't report
// it yet, because the call to the method that's being verified might
// be yet to happen.
verify(myMock);
}
@Test
public void test3() {
// ERROR 2 is reported on the following line, even though it's not even in
// the same test as the error.
doReturn("Hello").when(myMock).method1();
// ERROR 3
// This compiles and runs, but it's an invalid use of the framework because
// Mockito doesn't know what method call is being stubbed. But Mockito can't
// report it yet, because the call to the method that's being stubbed might
// be yet to happen.
doReturn("World").when(myMock);
doSomeTestingStuff();
// ERROR 3 is never reported, because there are no more Mockito calls.
}
五年多前我第一次写这个答案的时候,我写道
因此,我建议尽可能使用MockitoJunitRunner
。但是,正如Tomasz Nurkiewicz正确指出的那样,如果您需要另一个JUnit运行程序,比如Spring运行程序,就不能使用它。
我的建议现在改变了。自从我第一次写这个答案以来,Mockito团队已经添加了一个新特性。它是一个JUnit规则,执行与MockitoJUnitRunner
完全相同的功能。但这样更好,因为这并不排除其他跑步者的使用。
@Rule
public MockitoRule rule = MockitoJUnit.rule();
在你的测试课上。这将初始化模拟,并自动化框架验证;就像MockitoJunitRunner
一样。但是现在,您也可以使用SpringJUnit4ClassRunner
或任何其他JUnitRunner。从Mockito 2.1.0开始,有更多的选项可以控制报告的问题类型。
我的代码: }在这个特定的测试中没有失败,但是当我运行这个套件时,Mockito会告诉我不正确使用匹配器的情况。 我也可以做一些类似的事情:
我是说替换 只要 在班上名列前茅。对我有用。 请给出你的建议。 使用SpringJunit4ClassRunner.class而不是MockitoJunitRunner.class
问题内容: 我写单元测试,并希望使用和一个测试类。 不幸的是,以下操作无效: 有没有办法在一个测试类中同时使用Mockito和JUnitParams? 问题答案: 您不能执行此操作,因为根据规范,您不能将相同的注释两次放置在相同的注释元素上。 那么,解决方案是什么?解决的办法是只放一个你无法忍受的赛跑者,然后用其他东西代替。对于您的情况,我想您将删除并以编程方式执行此操作。 实际上,它唯一要做的就
问题内容: 我有这个非常简单的课程: 在类路径中指定的此上下文文件不存在。我几乎可以输入任何想要的名称,并且代码不会中断。我的意思是测试运行正常,就好像该文件确实存在。 如果我从: classpath 到 classpath* 做了一个小的更改,它会发出喙,表示该文件不存在,这也是我在第一种情况下的预期行为。 春季版本3.2.3。 有人可以解释这种奇怪的行为吗? 编辑 建议的日志内容: 我什至尝试
我试图让RunWith(PowerMockRunner.class)处理我现有的包注释。 版本: Powermock 1.4.12 mockito 1.9.0 jUnit 4.8.2 package-info.java//这是包注释 测试说明。java//这是包“com.smin.dummy”的元数据注释类 A、 爪哇 莫卡。Java语言 在unitest MockA中。如果我不使用RunWith