【问题标题】:JMockit Dependency ConstructorJMockit 依赖构造函数
【发布时间】:2019-03-24 09:29:59
【问题描述】:

我希望在使用 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");
  }
}

【问题讨论】:

  • 您不能在@BeforeClass 方法中记录期望;模拟尚未激活。
  • @Rogério:谢谢!做到了:)

标签: java jmockit jmock


【解决方案1】:

JMockit documentation 应该回答这个问题。

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

顺便说一句,拥有new DomainClass("original").domainMethod() 并不是“糟糕的设计”(相反,将它变成一个单例——无论是否注入——都会)。然而,模拟这样的类很可能是个坏主意。总是喜欢嘲笑。

【讨论】:

  • 感谢您的建议。我试了一下,但它似乎不起作用。 (更新后)
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 2011-02-02
  • 1970-01-01
  • 2016-03-31
  • 2018-06-17
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多