有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有内部对象的Java单元测试

我有以下两门课

public class SampleTest {
   public Integer getResult() {
     Test1 test1 = new Test1(5);
     Integer j = doSomeThing(test1);
     return j;
   }

   public Integer doSomeThing(Test1 test1){
     Integer p = test1.getValue();
     return p+1;
   }
}

public class Test1 {
  Integer i;
  Test1(Integer i){
    this.i = i*2;
  }

  Integer getValue(){
    return i;
  }

我想对SampleTest getResult()进行单元测试,但我想在这里模拟Test1(),这样我就可以返回我在UnitTests中设置的任何值。这些课我都改不了

我使用Mockito尝试了一些模式,但没有成功

请提出一些好的建议


共 (1) 个答案

  1. # 1 楼答案

    你绝对可以把Mockito和你现在拥有的类一起使用。 我建议您为SampleTest添加一个构造函数,在其中传递一个test1实例:

    public SampleTest(Test1 test1) {
        this.test1 = test1;
    }
    

    然后,getResult方法可以使用这个Test1客户端:

    public Integer getResult() {
        Integer j = doSomeThing(this.test1);
        return j;
    }
    

    最后,您可以模拟test1实例,让它返回您想要的任何内容:

    Test1 test1 = Mockito.mock(Test1.class);
    Mockito.when(test1.getValue()).thenReturn(42);
    SampleTest sampleTest = new SampleTest(test1);
    Assertions.assertThat(sampleTest.getResult()).isEqualTo(43);
    

    通过这种设计,您可以在两个类之间进行松散耦合,并且您的测试可以清楚地显示它们之间的关系