我是最小起订量和单元测试的新手。我一直在进行单元测试,这是以下代码:
private Mock<IServiceAdapter> repository;
[TestInitialize]
public void Initialize()
{
repository= new Mock<IServiceAdapter>();
}
[TestMethod()]
public void SaveTest()
{
//Setup
string Name = "Name1";
string Type = "1";
string parentID = null;
repository.Setup(x => x.Save(Name , Type, parentID)).Returns("Success").Verifiable();
//Do
var result = repository.Object.Save(Name , Type, parentID);
//Assert
repository.Verify();
}
我的问题是测试将始终返回我放入 Returns 参数中的字符串,换句话说,它将始终返回“成功”或我在其位置写入的任何内容。我想那是不对的,因为那不是服务的真实行为。任何人都知道如何反射(reflect)我要测试的“保存”服务的真实行为?所以可以说,如果返回字符串与服务方法不同,则测试应该失败。
已编辑
ServiceAdapter 接口(interface)只是 Web 服务的包装器,我称之为 REST 服务。这是一个 Web 窗体项目。
我正在做类似这篇文章的事情
我是否应该创建类似带有依赖注入(inject)的 FakeController 的东西来让它工作?
最佳答案
你在这里测试 mock,这不会给你任何东西(因为这个 mock 没有在你的真实应用程序中使用)。在单元测试中,您应该创建和测试您的真实对象,这些对象存在于您的真实应用程序中(即接口(interface)实现)。 Mocks 用于模拟被测对象的依赖关系。
因此,服务适配器的模拟对于使用该适配器的对象的测试很有用,例如一些 Controller 测试:
private FooController _controller; // object under test, real object
private Mock<IServiceAdapter> _serviceAdapter; // dependency of controller
[TestInitialize]
public void Initialize()
{
_serviceAdapter = new Mock<IServiceAdapter>();
_controller = new FooController(_serviceAdapter.Object);
}
[TestMethod()]
public void SaveTest()
{
// Arrange
string name = "Name1";
string type = "1";
string parentID = null;
_serviceAdapter.Setup(x => x.Save(name , type, parentID))
.Returns("Success").Verifiable();
// Act on your object under test!
// controller will call dependency
var result = _controller.Bar(name , type, parentID);
// Assert
Assert.True(result); // verify result is correct
_serviceAdapter.Verify(); // verify dependency was called
}
关于c# - 单元测试接口(interface)与最小起订量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796817/