繁体   English   中英

JUnit测试-在模拟对象上资产或验证(或两者)?

[英]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个选项,并且想知道什么是最佳做法?

  1. 做在一个的assertEquals response于测试方法testBarqux在实例变量FooTest
  2. 上面verifyFooTest中的baz实例进行了verify ,以verify也调用了waldofred 还是这些验证调用是多余的,因为返回了baz ,所以我假设它们被调用了?
  3. 做1和2?

首先,您需要定义执行这些语句时发生的情况。

 baz.waldo();  
 baz.fred();  
 baz.newQux();

由于baz是一个模拟。

其次,您必须进行验证以确保所有方法都被调用。 您也可以断言。 但是首先,您需要定义在baz.newQux()时必须修复的内容。 并检查foo.bar()的响应是否与您定义的相同。

如果有可能断言 ,那就去做。 在这种情况下,您将检查方法被调用后返回的实际值。

验证检查该方法是否被调用。 当您调用某个方法并且要检查是否在内部调用了另一个方法,但您无法基于返回对象执行此操作时,此功能将更为有用。 在您的情况下,您将返回整个对象,因此,从您的角度来看,您应该可以使用assert。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM