這是我如何使用Mockito和Spring的方式。
讓我們假設我有一個控制器使用一個服務,這個服務注入自己的DAO,基本上有這個代碼結構。下面
@Controller
public class MyController{
@Autowired
MyService service;
}
@Service
public class MyService{
@Autowired
MyRepo myRepo;
public MyReturnObject myMethod(Arg1 arg){
myRepo.getData(arg);
}
}
@Repository
public class MyRepo{}
代碼是JUnit測試用例
@RunWith(MockitoJUnitRunner.class)
public class MyServiceTest{
@InjectMocks
private MyService myService;
@Mock
private MyRepo myRepo;
@Test
public void testMyMethod(){
Mockito.when(myRepo.getData(Mockito.anyObject()).thenReturn(new MyReturnObject());
myService.myMethod(new Arg1());
}
}
如果使用獨立應用程序考慮模擬如下。
@RunWith(MockitoJUnitRunner.class)
public class PriceChangeRequestThreadFactoryTest {
@Mock
private ApplicationContext context;
@SuppressWarnings("unchecked")
@Test
public void testGetPriceChangeRequestThread() {
final MyClass myClass = Mockito.mock(MyClass.class);
Mockito.when(myClass.myMethod()).thenReturn(new ReturnValue());
Mockito.when(context.getBean(Matchers.anyString(), Matchers.any(Class.class))).thenReturn(myClass);
}
}
我真的不喜歡在應用程序的上下文中創建模擬bean,但如果你確實使它只適用於你的單元測試。
乾杯,謝謝你的回答。你介意看看其他一些相關的問題:單元測試和春天嗎? 特別是這一個:http://stackoverflow.com/questions/29203218/instantiating-objects-when-using-spring-for-testing-vs-production – dwjohnston 2015-03-25 03:04:19
我已經添加我的答案在另一個問題,謝謝=) – Koitoer 2015-03-25 23:27:52