如何在没有getter / setter(Injected)的情况下测试使用私有参数的方法?

时间:2017-11-24 09:05:30

标签: java unit-testing junit

在Java中这样:

@Injected
private Int a;

@Injected
private Int b;

public void myMethod() {
    System.out.println(a);
    System.out.println(b);
}

我不知道如何测试这种方法。

3 个答案:

答案 0 :(得分:0)

  

如何测试使用私有参数的方法   吸气剂(注入)?

仅使用反射,因为您没有直接设置这些字段的方法 您可以手头或使用PowerMock等工具完成此任务。

WhiteBox类允许实现它。

现在,我不建议这样做 它很棘手,组件的依赖关系应该是可见的,以使它们清晰,并允许它们自然地切换和测试。

您不会被迫使用制定者 你可以使用构造函数注入。

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

它有点冗长但实际上并不是什么大问题。

答案 1 :(得分:0)

假设您的意思是使用@Inject(来自javax.inject),那么您可以使用Mockito中的@InjectMocks,尽管这可能不会对原始值有效(假设您打算写int而不是Int)。

但使用此功能有一些注意事项:https://tedvinke.wordpress.com/2014/02/13/mockito-why-you-should-not-use-injectmocks-annotation-to-autowire-fields/

答案 2 :(得分:0)

我不建议您编写这样的代码,如果它已经编写为重构它。依赖注入的想法是具有可以注入运行时的依赖性。目前它们是通过反射注入的,因此davidxx说你必须使用反射来设置你需要的值。这可能会让你头疼不已 而不是像这样使用现场注入:

@Inject
private Int b;

您可以像这样使用setter注入:

@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;
   }
}