JMockit依赖项构造器

时间:2018-10-19 13:21:24

标签: java jmockit jmock

当我使用JMockit测试服务类时,我希望模拟出一个域依赖性。问题在于,在Service的一种方法中实例化了Domain对象,并且所使用的Domain构造函数具有参数。

域类别:

package com.example;
public class DomainClass {
  String str;
  public DomainClass(String s) {
    str=s;
  }
  public String domainMethod() {
    return str;
  }
}

服务等级

package com.example;
public class ServiceClass {
  public String serviceMethod() {
    return new DomainClass("original").domainMethod();
  }
}

如何模拟出ServiceClass使用的DomainClass?

注意:我不想更改Domain或Service类。 (我意识到这段代码是微不足道的,可以编写得更好,但这只是更复杂代码的简单示例。)

测试班级(最终答案)

package com.example;
import org.testng.*;
import org.testng.annotations.*;
import mockit.*;
public class TestClass {
  @Mocked DomainClass domainClass;
  @Test
  public void testMethod() {
      new Expectations() {{
          new DomainClass("original").domainMethod(); result = "dummy";
      }};
      String ss = new ServiceClass().serviceMethod();
      System.out.println(ss);
      Assert.assertEquals(ss, "dummy");
  }
}

1 个答案:

答案 0 :(得分:1)

JMockit documentation应该回答。

无论如何,要模拟一个类,只需使用@Mocked DomainClass(作为模拟字段或测试方法参数)。

具有new DomainClass("original").domainMethod()的BTW并不是“不良设计”(相反,将其变成一个单例-注入或不注入)。但是,嘲笑这样的类可能是个坏主意。总是喜欢 not 嘲笑。