JMockit官方教程:被测试类的初始化和注入,20190401

JMockit官方教程:被测试类的初始化和注入,20190401

原文:http://jmockit.github.io/tutorial/Mocking.html#tested

 

测试类中,一个非final的实例字段被注解为@Tested,那么会在每个测试方法执行前,被自动实例化并注入。如果此时,这个字段是null,那么会使用一个合适的构造函数来实例化,并确保内部关联对象被正确注入。
为了向被测试对象里面注入mock过的实例,测试类需要包含一个或多个被注解为@Injectablel的mock字段或参数。为注解为@Mocked和@Capuring的mock字段或参数不会用来做注入之用。另外一方面,不是所有可注入的字段或参数需要有对应的可mock的类型。还可以有原生类型或数组。
public class SomeTest
{
   @Tested CodeUnderTest tested;
   @Injectable Dependency dep1;
   @Injectable AnotherDependency dep2;
   @Injectable int someIntegralProperty = 123;

   @Test
   public void someTestMethod(@Injectable("true") boolean flag, @Injectable("Mary") String name) {
      // Record expectations on mocked types, if needed.

      tested.exerciseCodeUnderTest();

      // Verify expectations on mocked types, if required.
   }
}
注意:一个不可mock的被@Injectable注解的字段或参数必须显示赋值,(原生类型?比如上面的 @Injectable int someIntegralProperty = 123;)否则会使用默认值。一个可注入的字段,其值可以直接赋予。(?)另外的做法,可以在@Injectable注解的value属性中赋值。这是为@Injectable参数赋值唯一的方式。
支持两种赋值方式:构造函数注入、值注入。
构造函数注入:被测试类必须有一个构造函数,满足测试类中定义了的可注入的值。注意:对一个给定的测试,可注入值由可注入字段集合,加上可注入的参数集合。因此,同一个测试类中的不同测试,可以提供不同的注入值给同一个被测试对象。
被测试类一旦选定构造函数,其中未被初始化的非final实例字段会被注入。注入的时候,会在测试类中按可被注入字段的类型,寻找同类行的字段。如果只找到一个,那就使用这个。如果有多个,则再使用字段名来做选择。

发表评论