【发布时间】:2016-09-29 17:26:57
【问题描述】:
请帮我解决我的问题。我有一个服务类,如下所示:
public class RateService:IRatesService
{
...
public RatesDTO GetById(int Id)
{
return Mapper.Map<Rates, RatesDTO>(this.db.Rates.GetAll().Where(m => m.RateId == Id).First());
}
}
一个接口 IRatesService 看起来像那个代码示例:
public interface IRatesService
{
.....
RatesDTO GetById(int Id);
....
}
现在我尝试测试公共 RatesDTO GetById(int Id) 方法。我的代码如下:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Mock<IRatesService> mock = new Mock<IRatesService>();
mock.Setup(m => m.GetById(It.IsAny<int>())).Returns<RatesDTO>(total=>total);
Assert.IsNotNull(mock.Object.GetById(1));
}
}
但是当我运行测试时,我收到如下错误:
测试名称:TestMethod1 测试
全名:Provider.Tests.Services.UnitTest1.TestMethod1结果消息:
测试方法 Provider.Tests.Services.UnitTest1.TestMethod1 抛出 异常:System.ArgumentException:Невозможно преобразовать объект типа "System.Int32" к типу "Provider.BLL.DTO.RatesDTO"。
测试服务类和方法的最佳实践是什么?
【问题讨论】:
-
如果您尝试测试 RateService,您应该测试具体类并且不应该模拟它。模拟存在于您想要单独测试类的情况下,因此您可以模拟类所依赖的对象。
标签: c# unit-testing