我不熟悉起订量和一般测试,所以这是我的菜鸟问题。 如何测试 Request 的 Status 属性是否已使用 Moq 设置?
public class DudeManager
{
private readonly IDRepository _repo;
public DManager(IDRepository repo)
{
_repo = repo;
}
public void Create(Request r)
{
r.Status = Status.Submitted;
_repo.AddRequest(r);
}
}
是否有比以下方法更好的方法?也许使用 VerifySet?
[TestMethod]
public void AddingNewRequestSetsStatusToSubmitted()
{
//Arrange
var mock = new Mock<IDRepository>();
var mockRequest = new Mock<Request>();
var dManager = new DManager(mock.Object);
//Act
dManager.Create(mockRequest.Object);
//Assert
Assert.AreEqual(Status.Submitted, mockRequest.Object.Status);
}
编辑:在所有有用的建议之后,这是我最终使用的方法:
//Arrange
var request = new Request();
var mock = new Mock<IDRepository>();
var dManager = new DManager(mock.Object);
mock.Setup(x => x.AddRequest(It.IsAny<Request>()));
//Act
dManager.QueueNewRequest(request);
//Assert
Assert.AreEqual(RequestStatus.Submitted, request.Status);
这种方法对我来说似乎是正确的。有人不这么认为吗?
最佳答案
我认为 VerifySet 是正确的方法。它看起来像这样:
//Arrange
var mock = new Mock<IDRepository>();
var mockRequest = new Mock<Request>();
// TODO: set some expectations here
var dManager = new DManager(mock.Object);
//Act
dManager.Create(mockRequest.Object);
//Assert
mockRequest.VerifySet(x => x.Status = Status.Submitted);
我相信你的情况,因为你没有设置你的 Request 模拟来处理 Status 上的设置操作,所以它失败了。
一种简单的方法是使用 SetupAllProperties
,如下所示:
//Arrange
var mock = new Mock<IDRepository>();
var mockRequest = new Mock<Request>();
mockRequest.SetupAllProperties();
关于c# - 检查属性是否已设置 - 使用 Moq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16926995/