2012-04-25 38 views
2

我使用Spring框架的測試使用JUnit一起。我有我使用的測試案例Spring上下文文件:的Mockito NotAMockException當它顯然是

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "classpath:spring/restTestContext.xml", 
     "classpath:spring/webserviceContext.xml" }) 
@PrepareForTest(User.class) 
public class RestTestsIT { 

// This is a mock 
@Autowired private AWSMailService mailService; 
... 
} 

在我創造型AWSMailService的一個bean(實際上是一個模擬)的restTestContext.xml:

<bean id="mailService" name="mailService" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="com.acme.utils.email.AWSMailService" /> 
</bean> 

在測試我想驗證sendEmail()方法被調用的MailService的模擬,但我得到一個NotAMockException雖然在對象上調用toString()告訴我,這是一個模擬:

public void testEmailSent() { 
... 
// Results in "Mock for AWSMailService, hashCode: 31777764" 
System.out.println(mailService.toString()); 

// Results in NotAMockException 
verify(mailService).sendEmail(any(String.class), ...); 
} 

有沒有人有任何想法可能導致這種情況?

感謝

+0

固定它:)顯然,我必須要耐心等待8小時,然後我可以回答我的問題,所以我會更新明天:( – 2012-04-25 13:22:18

回答

1

是春天創建一個代理此對象,這樣認爲的Mockito它不是一個模仿的,因爲得到的youre代理$三個四級爲呼叫者和你的模擬對象之間的中間?

+0

是準確的,我周圍的工作由手工佈線了模擬 – 2012-04-25 15:10:34

0

固定它:)

的問題是,是的Mockito確實創造了模擬,但隨後在春季就進行代理和是的Mockito不夠聰明,制定出的周圍有模擬的代理。

我現在手動在單元測試中創造了嘲笑和它們連接起來:

@Mock private AWSMailService mailService; 
@Autowired private UserService userService; 

@Before 
public void setup() { 
    ((UserServiceImpl) userService).setMailService(mailService); 
} 
1

我有同樣的問題,我用的是1.8.1的Mockito,在1.9.0版本的問題有已修復。

現在的Mockito的有效模擬算法發生了變化,也未與春天代理豆衝突。

相關問題