如何测试使用没有Getters/Setter的私有参数(注入)的方法



在java中这样:

@Injected
private Int a;
@Injected
private Int b;
public void myMethod() {
    System.out.println(a);
    System.out.println(b);
}

我不知道如何测试此方法。

我不建议您像这样编写代码,并且是否已经编写以重构。依赖注入的想法是具有可以注入运行时的依赖项。目前,它们被反射注入,因此Davidxx表示您必须使用反射来设置所需的值。这可能会引起您的头痛。
而不是使用这样的现场注射:

@Inject
private Int b;

您可以使用这样的设置器注入:

@Inject
public void setB(int b) {
   this.b = b
}

另一种方法是使用这样的构造函数注入:

public YourClass {
   private int a;
   private int b;
   @Inject
   public YourClass(int a, int b){
      this.a = a;
      this.b = b;
   }
}

假设您的意思是使用@Inject(来自javax.inject),那么您可以使用Mockito中的@InjectMocks,尽管这可能与原始值无法很好地工作(假设您打算写作int而不是Int)。

但是,有一些警告,但是:https://tedvinke.wordpress.com/2014/02/13/mockito-why-why-why-you-should-not-not-not-should-not-inot-ind-injectMocks-antoctmocks-antoctmocks-antocks-anotation-to-autowire-fields/

如何测试使用没有私人参数的方法 Getters(注入)?

仅带有反射,因为您没有直接设置这些字段的方法。
您可以在手头或使用工具进行此类PowerMock进行操作。

WhiteBox类允许实现它。

现在,我不建议这样做。
这很棘手,应该可以看到组件的依赖项,以使它们清除并允许它们自然可切换和可测试。

您不被迫使用二传手。
您可以使用构造函数注入。

@Inject
public Foo(Int a, Int b) {
    this.a = a;
    this.b = b;
}

这有点冗长,但实际上没什么大不了的。

最新更新