【发布时间】:2015-01-14 12:14:59
【问题描述】:
如何测试以下代码?
class1 {
public InjectedClass injectedClass;
method1(){
returnValue = injectedClass.someMethod;
//another logic
}
method2(){
resultValue = method1();
}
}
我的应用程序是用 Java 开发的。我使用 JUnit 和 Mockito。
为了测试method1(),我可以为InjectedClass 创建一个模拟,为someMethod() 创建一个模拟逻辑。
但是如何正确地测试一种方法呢?我需要为method1() 创建一个模拟吗?
更新: 让我演示一个真实的例子。
public class Application {
@Inject
DAOFacade facade;
//method1
public ReturnDTO getDTO(LiveServiceRequestParam requestParam) throws AffiliateIdentityException {
ReturnDTO returnDTO = new ReturnDTO();
CoreProductRepository repo = recognizeProduct(ProdCodeTypeEnum.MPN, null, vendorBound);
if(repo!=null){
//logic to fill some fileds in returnDTO
}
return returnDTO ;
}
//метод2
CoreProductRepository recognizeProduct(ProdCodeTypeEnum paramType, String prodCode, List<Integer> vendors) {
CoreProductRepository coreProductRepository = null;
switch (paramType) {
case MPN:
coreProductRepository = facade.findByAlternativeMPN(prodCode, vendors);
break;
case EAN:
coreProductRepository = facade.findByEan(prodCode, vendors);
break;
case DESCRIPTION:
coreProductRepository = facade.findByName(prodCode, vendors);
break;
}
return coreProductRepository;
}
}
所以,为了测试识别产品,我模拟了 DAOfacade。但我也想测试使用 identifyProduct 方法的 getDTO 方法。
【问题讨论】:
-
做一些模拟对象。
-
可以从课堂外访问
returnValue和resultValue吗?我的意思是他们是public还是public getter and setter? -
对不起,脏例子,我已经更新了更现实的目的
-
这个问题不是关于私有方法的。
标签: java unit-testing testing junit mockito