JMockit 依赖构造函数
JMockit Dependency Constructor
我希望在测试服务时模拟域依赖性 Class,使用 JMockit。问题是,域对象是在服务的一种方法中实例化的,并且使用的域构造函数具有参数。
域Class:
package com.example;
public class DomainClass {
String str;
public DomainClass(String s) {
str=s;
}
public String domainMethod() {
return str;
}
}
服务Class
package com.example;
public class ServiceClass {
public String serviceMethod() {
return new DomainClass("original").domainMethod();
}
}
如何模拟服务Class正在使用的域Class?
注意:我不打算更改域或服务 类。 (我意识到这段代码很简单,可以写得更好,但它只是更复杂代码的一个简单示例。)
测试Class(最终答案)
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 应该回答这个问题。
无论如何,要模拟 class,只需使用 @Mocked DomainClass
(作为模拟字段或测试方法参数)。
顺便说一句,有 new DomainClass("original").domainMethod()
不是 "bad design"(相反,将其变成单例 - 注入与否 - 都会)。但是,mocking 这样的 classes 很可能不是一个好主意;总是喜欢而不是嘲笑。
我希望在测试服务时模拟域依赖性 Class,使用 JMockit。问题是,域对象是在服务的一种方法中实例化的,并且使用的域构造函数具有参数。
域Class:
package com.example;
public class DomainClass {
String str;
public DomainClass(String s) {
str=s;
}
public String domainMethod() {
return str;
}
}
服务Class
package com.example;
public class ServiceClass {
public String serviceMethod() {
return new DomainClass("original").domainMethod();
}
}
如何模拟服务Class正在使用的域Class?
注意:我不打算更改域或服务 类。 (我意识到这段代码很简单,可以写得更好,但它只是更复杂代码的一个简单示例。)
测试Class(最终答案)
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 应该回答这个问题。
无论如何,要模拟 class,只需使用 @Mocked DomainClass
(作为模拟字段或测试方法参数)。
顺便说一句,有 new DomainClass("original").domainMethod()
不是 "bad design"(相反,将其变成单例 - 注入与否 - 都会)。但是,mocking 这样的 classes 很可能不是一个好主意;总是喜欢而不是嘲笑。