java - 我如何模拟我正在测试的类的继承方法

标签 java junit mocking mockito powermock

我有类似的代码

class Util{
 public String transform(String str);
 //lots of logic including ajax calls
 return("Modified"+str);
 }
 public caseChange(String str){
 //lots of logic including ajax calls
 return str.toUpperCase()      
 }

class TextParser extends Util{
 public String parse(str)
//lots of logic to modify str
 str = caseChange(str);
 //some more logic to modify str
return transform(str);
}

是否有办法模拟 caseChange 和转换方法以返回一些模拟数据并防止在我调用时调用父类(super class)

String result = new TextParser().parse("hello")

在单元测试类中断言结果。

在我的示例中,transform 和changeCase 过于简化。实际上,它们执行 ajax 调用,并且还有大量其他逻辑。我想模拟它们,以便可以仅对这一部分进行单元测试,然后对 super 方法进行单元测试

最佳答案

您可能需要创建另一个子类,例如

class TextParserForTest extends TextParser {
      @Override
      public String parse(String str)  {
              super.parse(str);
      }

      @Override
      public String caseChange(String str) {
              return "whatever";
      }
}
<小时/>

编辑:使用mockito来实现:

import static org.mockito.Mockito.*;

import org.junit.Test;

@Test
public void test() {
    TextParser tp = mock(TextParser.class);

    // all the methods that you want to test
    when(tp.parse(any())).thenCallRealMethod();
    when... 

    // all the methods that you want to mock
    when(tp.caseChange(any()).thenReturn("whatever");
    when... 
}

关于java - 我如何模拟我正在测试的类的继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246571/

相关文章:

java - 如何通过 Spring 中的并发调用来限制方法?

java - 我需要我的 Spring Boot Web 应用程序在 JUnit 中重新启动

scala - 在单元测试中模拟 Spark RDD

java - Java中的巴比伦算法

java - 从不同的类调用内部类成员

java - 如何在一个 hashmap 上设置 2 个迭代器

java - @After 注释在 JAVA 7 中使用 JUnit 时首先运行

java - 在多线程环境中使用 JUnit 的奇怪问题

unit-testing - 如何在实习生测试中模拟依赖关系

kotlin - 如何使用 mockk 调用 lambda 回调