使用内部对象进行 Java 单元测试

标签 java unit-testing mockito

我有以下两个类(class)

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 尝试了一些模式,但没有成功。

请提出一些好的建议。

最佳答案

我认为您需要 Mockito 扩展 Powermock为此,因为它需要更改类的字节码。请参阅Mock construction of new objects有关如何执行此操作的说明。

主要工具可能是expectNewcreateMockAndExpectNew。例如(未经测试,可能遗漏了一些东西,但总体方向):

Test1 mockedTest1 = createMockAndExpectNew(Test1, any(Integer));
expect(mockedTest1.getValue()).andReturn(42);
replayAll(); // setup all objects maintained by Powermock.
assertEquals(new SampleTest().getResult(), 43);

关于使用内部对象进行 Java 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845021/

相关文章:

java - SwingWorker 是否必须是嵌套类?

java - 从 docker 文件中获取 pom.xml 中定义的文件名的最佳实践是什么?

c++ - 谷歌测试 : How to run fixture only once for multiple tests?

sql-server - 你如何对你的 T-SQL 进行单元测试

java - 哪里可以下载Mockito 2.3.3 Jar?

java - 单元测试 : check if a particular Comparable has been called

java - 使用 Mockito 进行长而复杂的方法的单元测试

java - 如果找不到数据库,如何编写异常以允许应用程序运行?

python:设置不同的配置文件进行单元测试

java - Java源代码中的 ".class"到底是什么