[英]JUnit test - asset or verify (or both) on a mock object?
我正在为我在代码中定义的一些bean编写JUnit测试,以通过java注释了解spring配置。 测试代码如下:
public class FooTest {
@MockBean
private Baz baz; //injected
@MockBean
private Qux qux; //injected
public void testBar() {
Foo foo = new Foo(baz);
Qux reponse = foo.bar();
// verify or assert?
}
}
其他类的定义如下:
@Component
class Foo {
Baz baz;
@Autowired
Foo(Baz baz) {
this.baz = baz
}
Qux bar() {
baz.waldo();
baz.fred();
return baz.newQux();
}
}
@Component
class Baz {
//...
}
在JUnit测试中可以看到,我从FooTest
类中的FooTest
Qux
bean返回了Qux
响应。 这让我开始考虑在Foo
类中测试bar
方法。 我在这里看到3个选项,并且想知道什么是最佳做法?
response
于测试方法testBar
上qux
在实例变量FooTest
。 verify
对FooTest
中的baz
实例进行了verify
,以verify
也调用了waldo
和fred
? 还是这些验证调用是多余的,因为返回了baz
,所以我假设它们被调用了? 首先,您需要定义执行这些语句时发生的情况。
baz.waldo();
baz.fred();
baz.newQux();
由于baz是一个模拟。
其次,您必须进行验证以确保所有方法都被调用。 您也可以断言。 但是首先,您需要定义在baz.newQux()
时必须修复的内容。 并检查foo.bar()
的响应是否与您定义的相同。
如果有可能断言 ,那就去做。 在这种情况下,您将检查方法被调用后返回的实际值。
仅验证检查该方法是否被调用。 当您调用某个方法并且要检查是否在内部调用了另一个方法,但您无法基于返回对象执行此操作时,此功能将更为有用。 在您的情况下,您将返回整个对象,因此,从您的角度来看,您应该可以使用assert。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.