我有一个在 ABC 中自动连线的 XYZ 类,在类 MyClass 中我有一个方法名称 doSomething() 在该方法中我做 ABC abc = 新的 ABC();然后我调用 abc.someMethod();
请参见下面的代码示例:
ABC类
public class ABC {
@Autowire
private XYZ xyz;
public void someMethod()
{
//Some stuff
xyz.someFunc();
}
}
类MyCLass
public class MyCLass {
public void doSomething() {
ABC abc = new ABC();
abc.someMethod();
}
}
需要单元测试doSomething(),但我NPE在ABC中XYZ为空。在这种情况下,我怎么能模仿@Autowire。
可以在测试中使用以下测试功能:
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
提供配置并使用它,例如:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyTest.MyTestConfiguration.class)
public class MyTest {
// xyz injected into ABC and MyTest for convenience.
@Autowired
private XYZ xyz;
@Test
public void myTest() {
// Some Stubbing...
when(xyz.trySomething()).thenReturn(true);
// Some verification.
new ABC().doSomething();
verify(xyz, times(1))
.trySomething();
}
// Note it is used in @ContextConfiguration
@Configuration
static class MyTestConfiguration {
@Bean
XYZ xyz() {
return mock(XYZ.class);
}
}
}
文档有点广泛,请在此处搜索提到的注释 https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#integration-testing
如果使用构造函数注入而不是字段注入,则可以创建mock并将其交给ABC的构造函数:
public class ABC {
private final XYZ xyz;
public ABC(XYZ xyz) {
this.xyz = xyz;
}
public void someMethod()
{
//Some stuff
xyz.someFunc();
}
}
然后在测试中,当您创建被测试的实例时,只需创建它并移交mock:
XYZ mock = mock(XYZ.class);
ABC underTest = new ABC(mock);
问题内容: 我正在开发一个Web应用程序,该应用程序显然在iOS设备中存在问题。问题是我不拥有iOS设备,而是在Linux Ubuntu中进行开发。我正在寻找一种在Linux(尤其是浏览器)中仿真/模拟此OS的方法,但是还没有找到任何东西。 到目前为止,我发现的是iOS SDK的Simulator,但这是针对Mac的。还有一些Windows模拟器。有人做过吗? 问题答案: 我能想到的唯一解决方案是
问题内容: 我在源代码中使用了BufferedWriter对象 我正在尝试在我的测试用例中模拟它,如下所示: 但是,BufferedWriter不会被嘲笑,它总是进入实际的实现中。是因为它不能模拟BufferedWriter,因为它是一个具体的类吗?这是否意味着无法模拟任何java.io类?有没有办法模拟它,或者我做错了什么? 问题答案: ,你可以嘲笑的Java IO类(包括它们的构造,所以未来的
问题内容: 我正在尝试模拟DateTimeFormatter类。我已经完成以下工作: 用它格式化。然后,格式化的字符串将进一步用于生成另一个字符串。我需要确保正确生成字符串。因此,我需要从格式化程序返回一个一致的日期,或者模拟LocalDateTime.now(..)静态方法 我究竟做错了什么? 问题答案: 模拟的替代方法是将时钟注入您的类并更改您的(或添加另一个)构造函数,如下所示: 然后在您的
Alpha-父级,子级为beta 贝塔-阿尔法的孩子,查理 Charlie-有一个列表,通常在制作中会被洗牌 AlphaTest[需要此测试的帮助]-想尝试不同的洗牌变体,看看alpha/beta会如何反应。 目标是用不同的组合测试Alpha/Beta。不知道最好的方法是什么?这正是复制的代码。也可以更改设置以方便测试。尝试了不同的变体,但没有任何效果。非常感谢您的帮助。 我不确定,我尝试了一堆方
问题内容: 对于单元测试,我需要模拟几个依赖项。依赖项之一是实现接口的类: 我需要设置一个此类的模拟对象,当提供一些指定参数时,该对象将返回一些指定值。 现在,我不确定的是,模拟接口或类是否更好 与 在测试方面有什么不同吗?首选的方法是什么? 问题答案: 在您的情况下,可能不会有太大的区别,但是首选的方法是模拟接口,就像通常情况下,如果您遵循TDD(测试驱动开发),那么即使在编写实现类之前,也可以
我有一个scala类a,其中有一个方法。 还有一个B类