[英]Injecting mock @Service for Spring unit tests
我正在測試一個使用@Autowired注入服務的類:
public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {
@Autowired
private RuleStore ruleStore;
// Some other methods
}
但是如何在測試期間模擬ruleStore? 我無法弄清楚如何將我的模擬RuleStore注入Spring並進入自動布線系統。
謝謝
Mockito非常容易:
@RunWith(MockitoJUnitRunner.class)
public class RuleIdValidatorTest {
@Mock
private RuleStore ruleStoreMock;
@InjectMocks
private RuleIdValidator ruleIdValidator;
@Test
public void someTest() {
when(ruleStoreMock.doSomething("arg")).thenReturn("result");
String actual = ruleIdValidator.doSomeThatDelegatesToRuleStore();
assertEquals("result", actual);
}
}
了解更多關於@InjectMocks中的javadoc的Mockito或在博客中 ,我前段時間寫的話題。
自Mockito 1.8.3起可用,增強型1.9.0。
您可以使用Mockito之類的東西來模擬測試期間返回的規則庫。 這篇Stackoverflow帖子有一個很好的例子:
你可以這樣做:
package com.mycompany;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
@Component
@DependsOn("ruleStore")
public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {
@Autowired
private RuleStore ruleStore;
// Some other methods
}
你的Spring Context應該是這樣的:
<context:component-scan base-package="com.mycompany" />
<bean id="ruleStore" class="org.easymock.EasyMock" factory-method="createMock">
<constructor-arg index="0" value="com.mycompany.RuleStore"/>
</bean>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.