java - JMockit 依赖构造函数

标签 java jmockit jmock

我希望在使用 JMockit 测试服务类时模拟域依赖关系。问题是,Domain 对象是在 Service 的方法之一中实例化的,并且使用的 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?

注意:我不想更改域或服务类。 (我意识到这段代码很简单,可以写得更好,但这只是更复杂代码的一个简单示例。)

测试课(最终答案)

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");
  }
}

最佳答案

JMockit documentation应该回答这个问题。

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

顺便说一句,拥有 new DomainClass("original").domainMethod() 并不是“糟糕的设计”(相反,将其变成单例 - 注入(inject)或不注入(inject) - 都会是)。然而, mock 这样的类很可能是一个坏主意;总是喜欢 mock 。

关于java - JMockit 依赖构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893214/

相关文章:

java - Java 的枚举相对于旧的 "Typesafe Enum"模式的优势?

linux - com.sun.tools.attach.AttachNotSupportedException : Unable to open socket file: target process not responding or HotSpot VM not loaded

java - 如何使用 jmockit 模拟 public void 方法?

java - JMockit 捕获并替换接口(interface)方法逻辑

java - jMock 期望未指定

java - 根据用户输入将 ArrayList 拆分为多个 ArrayList

java - 如何使用 protobuf 将正在运行的系统从 int32 更新到 64?

java - 什么是NullPointerException,我该如何解决?

java - JMock - 没有期望的对象

java - 使用 Junit 或 Jmock 断言 java beans 数组具有唯一的属性值