我对测试有疑问。
我有一个返回异常的类。在这个类中,我有两种不同的方法,只返回两种不同类型的异常,一种返回所有异常(两种类型)
这是示例代码:
public interface IAnomalyService
{
IList<Anomaly> GetAllAnomalies(object parameter1, object parameter2);
IList<Anomaly> GetAnomalies_OfTypeA(object parameter1);
IList<Anomaly> GetAnomalies_OfTypeB(object parameter2);
}
public class AnomalyService : IAnomalyService
{
public IList<Anomaly> GetAllAnomalies(object parameter1, object parameter2)
{
var lstAll = new List<Anomaly>();
lstAll.AddRange(GetAnomalies_OfTypeA(parameter1));
lstAll.AddRange(GetAnomalies_OfTypeB(parameter2));
return lstAll;
}
public IList<Anomaly> GetAnomalies_OfTypeA(object parameter1)
{
//some elaborations
return new List<Anomaly> { new Anomaly { Id = 1 } };
}
public IList<Anomaly> GetAnomalies_OfTypeB(object parameter2)
{
//some elaborations
return new List<Anomaly> { new Anomaly { Id = 2 } };
}
}
class Anomaly
{
public int Id { get; set; }
}
我已经为检索A类和B类异常(GetAnomalies_OfTypeA和GetAnomalies_OfTypeB)的两种方法创建了测试。 现在我想测试函数GetAllAnomalies但我不确定我该做什么。
我想我必须测试它: 1)将类AnomalyService中的GetAnomalies_OfTypeA和GetAnomalies_OfTypeB声明为虚拟,模拟类AnomalyService,并使用Moq我可以将CallBase设置为true并模拟两个方法GetAnomalies_OfTypeA和GetAnomalies_OfTypeB。
2)将方法GetAllAnomalies移动到名为AllAnomalyService的另一个类(带有接口IAllAnomalyService)中,在其构造函数中,我将传递IAnomalyService的接口,然后我可以测试模拟IAnomalyService接口的GetAllAnomalies。
我是单位测试的新手,所以我不知道哪种解决方案更好,如果是其中一个或另一个。 你能救我吗?
谢谢你 卢卡答案 0 :(得分:0)
当一个类抵抗测试时,模拟是一个很好的工具。如果您有源,则通常不需要进行模拟。试试这种方法:
AnomalyService
个带有各种已定义的异常(只有A型,只有B型,两者,没有,只有C型......)GetAllAnomalies
返回与GetAnomalies_OfTypeA
相同的结果,GetAnomalies_OfTypeB
返回空列表。