如何使用 return "this" 的 Moq 方法
How to Moq methods that return "this"
我有接口
interface IService
{
IService Configure();
bool Run();
}
"real" 实现是这样做的:
class RealService : IService
{
public IService Configure()
{
return this;
}
public bool Run()
{
return true;
}
}
使用 Moq 模拟服务创建 Configure()
的默认实现 returns null
。
有没有一种方法可以在 return 模拟实例的起订量中设置方法?
您可以创建另一个使用相同接口的 Mock 对象,return 它:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var serviceMock1 = new Mock<IService>();
var serviceMock2 = new Mock<IService>();
serviceMock1.Setup(service => service.Configure())
.Returns(serviceMock2.Object);
var testClass = new TestClass(serviceMock1.Object);
Assert.IsNotNull(testClass.DoStuff());
}
}
public class TestClass
{
private readonly IService _service;
public TestClass(IService service)
{
_service = service;
}
public IService DoStuff()
{
return _service.Configure();
}
}
public interface IService
{
IService Configure();
bool Run();
}
public class RealService : IService
{
public IService Configure()
{
return this;
}
public bool Run()
{
return true;
}
}
假设您正在使用 Moq
,您可以简单地 Setup
模拟到 return 本身:
var mock = new Mock<IService>();
mock.Setup(service => service.Configure()).Returns(mock.Object);
var testClass = new TestClass(mock.Object);
然后验证方法是否return符合您的预期:
Assert.AreEqual(mock.Object, testClass.DoStuff());
任何一种方法都可以设置 return 模拟实例的方法。
//Arrange
var instance = Mock.Of<IService>();//mocked instance
var mockService = Mock.Get(instance);//mock object used to setup instance functionality
//setup method to return mocked instance
mockService.Setup(m => m.Configure()).Returns(instance);
或者
//Arrange
var mockService = new Mock<IService>();//mock object used to setup instance functionality
var instance = mockService.Object;//mocked instance
//setup method to return mocked instance
mockService.Setup(m => m.Configure()).Returns(instance);
我有接口
interface IService
{
IService Configure();
bool Run();
}
"real" 实现是这样做的:
class RealService : IService
{
public IService Configure()
{
return this;
}
public bool Run()
{
return true;
}
}
使用 Moq 模拟服务创建 Configure()
的默认实现 returns null
。
有没有一种方法可以在 return 模拟实例的起订量中设置方法?
您可以创建另一个使用相同接口的 Mock 对象,return 它:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var serviceMock1 = new Mock<IService>();
var serviceMock2 = new Mock<IService>();
serviceMock1.Setup(service => service.Configure())
.Returns(serviceMock2.Object);
var testClass = new TestClass(serviceMock1.Object);
Assert.IsNotNull(testClass.DoStuff());
}
}
public class TestClass
{
private readonly IService _service;
public TestClass(IService service)
{
_service = service;
}
public IService DoStuff()
{
return _service.Configure();
}
}
public interface IService
{
IService Configure();
bool Run();
}
public class RealService : IService
{
public IService Configure()
{
return this;
}
public bool Run()
{
return true;
}
}
假设您正在使用 Moq
,您可以简单地 Setup
模拟到 return 本身:
var mock = new Mock<IService>();
mock.Setup(service => service.Configure()).Returns(mock.Object);
var testClass = new TestClass(mock.Object);
然后验证方法是否return符合您的预期:
Assert.AreEqual(mock.Object, testClass.DoStuff());
任何一种方法都可以设置 return 模拟实例的方法。
//Arrange
var instance = Mock.Of<IService>();//mocked instance
var mockService = Mock.Get(instance);//mock object used to setup instance functionality
//setup method to return mocked instance
mockService.Setup(m => m.Configure()).Returns(instance);
或者
//Arrange
var mockService = new Mock<IService>();//mock object used to setup instance functionality
var instance = mockService.Object;//mocked instance
//setup method to return mocked instance
mockService.Setup(m => m.Configure()).Returns(instance);