Mor*_*ren 6 c# asp.net unit-testing interface moq
我是Moq和单元测试的新手.我一直在进行单元测试,这是以下代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是测试将始终返回我放在Returns参数中的字符串,换句话说,它将始终返回"成功"或我在其位置写入的任何内容.我想这不对,因为那不是服务的真实行为.任何人都知道如何反映我正在尝试测试的"保存"服务的真实行为?因此,假设返回字符串与服务方法不同,则测试应该失败.
编辑
ServiceAdapter接口只是Web服务的包装器,我称之为REST服务.这是一个Web表单项目.
我正在做这样的事情
我应该创建类似具有依赖注入的FakeController以使其工作吗?
Ser*_*kiy 12
你在这里测试mock,它什么也没给你(因为你的实际应用程序中没有使用这个mock).在单元测试中,您应该创建并测试真实对象,这些对象存在于您的实际应用程序中(即接口实现).模拟用于模拟测试对象的依赖关系.
因此,服务适配器的模拟对于使用该适配器的对象的测试很有用,例如一些控制器测试:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9572 次 |
| 最近记录: |