所以我有一个简单的java类:
@Component
public class IWantToTestThisClass {
@Autowired
private ClassA classA;
@Autowired
private ClassB classB;
public ObjectA doIt(...) {
classB.returnObject();
}
ClassA包含:
@Component
public class ClassA {
@Autowired
private ClassB classB;
public ObjectA doIt() {
classB.returnObject(...);
}
B类:
@Component
public class ClassB {
public ObjectA returnObject(...) {
...
}
我的测试设置如下所示:
@InjectMocks
private IWantToTestThisClass iWantToTestThisClass;
@Mock
private ClassA classA;
@Mock
private ClassB classB;
@Before
public void setUp() {
initMocks(this);
when(classA.doSmt()).thenCallRealMethod();
when(classB.doSmt()).thenCallRealMethod();
}
问题是ClassB不是为ClassA注入的。
然后通过classA调用returnObject(ClassB),它返回NullPointerException(ClassB不是模拟/注入的)。
如果通过IWantToTestThisClass调用returObject(class B),则可以。
这是同时为两个类注入ClassB的一种方法吗?我想调用真实的方法,而不是模拟的方法。
@Autowired可以被构造函数注入替换。那么,你的课程A将是:
@Component
public class ClassA {
private static ClassB classB;
public ClassA(ClassB classB){
this.classB=classB;
}
public ObjectA doIt() {
classB.returnObject(...);
}
}
通过这种方式,您可以稍后在@Front setUp方法中注入class B mock:
@Before
public void setUp() {
initMocks(this);
when(classA.doSmt()).thenCallRealMethod();
when(classB.doSmt()).thenCallRealMethod();
classB = new classB(classA);
}
你把mock注入我的课堂,而不是A课堂。所以A类中没有模拟,B类中没有注入。
尝试在类A之前添加@InjectMocks
或者你可以这样做:
ClassB mB = Mockito.mock(ClassB.class);
classA.setClassB(mB);
如果添加setter setClassB(…)去ClassA
可以模拟抽象类,也可以使用Mockito注释将模拟类注入抽象类。我现在有以下情况: 我想在AbstractClassUnderTest上使用类似@InjectMocks的东西,但它不能与@Mock结合使用。Powermock的Whitebox的当前情况是有效的,但我很好奇是否可以通过注释来解决它。我找不到任何解决方案或示例。 (我知道对测试抽象类的反对意见,我个人更愿意测试一个具体的实现,只使用@
问题内容: 我有以下代码: 我想使用Mockito创建一个测试。我编写了如下测试: 我在网上收到NullPointerException: ,它表示“策略”列表已初始化,但为空。Mohito有什么办法可以像Spring一样浪费时间?是否将所有实现接口“策略”的实例自动添加到列表中? 顺便说一句,我在Wrapper类中没有任何二传手,如果可能的话,我想以这种方式离开。 问题答案: Mockito不知
问题内容: 我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过在私有成员字段上使用注释来注入的。 我考虑过使用,但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模
问题内容: 我有以下课程: 和测试类: 如何在MyClass中将Apple实例作为模拟注入? 问题答案: 您可以通过3种方式解决此问题: 抽象工厂 :使用具体的工厂类,而不是使用静态方法: 在测试类中,模拟工厂: PowerMock :使用PowerMock创建静态方法的模拟。查看我对一个相关问题的答案,看看它是如何完成的。 可测试的类 :将创建的内容包装在方法中,并创建一个覆盖它的测试类: 当然
所以我有一个类需要测试。我们把它叫做ClassToTest。它有两个Dao对象作为字段。 正如您所看到的,ClassToTest不包含任何构造函数或setter,我正在使用spring自动关联字段。 现在,我有了一个具有classToTest所需的所有依赖项的基本测试类: 并且testClass扩展了这个BaseTest类: 这将导致保存时出现空指针异常。但是,如果我将设置方法更改为: 考试通过了