我已经看过很多关于如何测试某个方法是否被调用的例子。但为什么人们想要做这种形式的测试呢?测试所述方法的结果不是更有效吗?
如果我想测试add(X,Y)只是为了看它是否被调用...为什么我不断言添加(X,Y)== X + Y?在这种情况下,我不仅要验证是否正在调用该方法,而且我实际上正在验证该方法在同一测试中正在执行的操作。
即使在测试方法被调用X次的情况下,也就是说Summation(N),它将调用add N次以获得总共N + N - 1 ... + 0;我仍然无法看到只测试添加多少次调用的价值。
有人可以给一位初级测试工程师提供一些有用的建议来理解这一点。也许一个为什么测试一个方法被调用的例子很重要,为什么不仅仅测试它的结果会更加必要?
我认为有些澄清是必要的。具体来说,我正在考虑Mockito.verify方法。为什么只想要验证方法是否被调用。我对Mockito.Verify的理解如下。
public void testSummation(){
Calculator.Summation(X);
//which I guess I would assume called Add() X times.
Verify(Calculator times(x).add();
(注意这只是一个通用的例子而不是我写过的实际代码)但是为什么要验证添加是否被称为X次?不会测试从Summation返回的正确值是否是一个更好的测试?
答案 0 :(得分:1)
测试对象应该正常运行。给定一些已定义的输入,不仅可以正确设置其内部状态,还可以通过其定义的接口以正确的方式与其他对象协作。函数调用通常是对象之间定义的接口的一部分,因此测试测试对象是否遵循这些接口的规则非常重要。换句话说,使用正确的参数在正确的时间调用正确的方法并正确处理响应。
答案 1 :(得分:0)
以此为例
public Integer AddSum(Int a, Int b){
Integer x= a+b;
// Testing : Log message to confirm x=a+b was completed
String f = x;
//Testing : Log message here does NOT get called as the above statement cause code to crash
return x;
}
一个函数可以包含很多部分,你想知道在崩溃/或检查意外数据值之前函数到达了哪一行。在示例中,如果我们只添加两个数字,它并没有真正有所作为,但只要完成其他内容,它就很重要。例如,任何代码都使用JSONObjects应该总是被记录/测试,因为它们经常会出错并且处理起来很棘手
答案 2 :(得分:0)
嗯,如你所注意到的那样,只需进行单元测试就可以了。
但是假设您正在构建一个计算器应用程序,显然当用户请求添加操作(您调用添加(X,Y))时,您可能希望将结果呈现给用户。
您当然需要测试添加操作(断言添加(X,Y)== X + Y),但是您如何测试结果是否呈现给用户?您是否需要一种方法来验证printResult(用于打印结果的方法的名称)是否被调用?