JMockit 依赖构造函数



我希望在使用JMockit测试服务类时模拟域依赖关系。问题是,域对象在服务的方法之一中实例化,并且使用的域构造函数具有参数。

域类:

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

如何模拟服务类正在使用的域类?

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

测试类(最终答案(

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 文档应该回答这个问题。

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

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

最新更新