c# - 检查属性是否已设置 - 使用 Moq

标签 c# unit-testing properties mocking moq

我不熟悉起订量和一般测试,所以这是我的菜鸟问题。 如何测试 RequestStatus 属性是否已使用 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/

相关文章:

javascript - AngularJs Jasmine 单元测试因意外请求而失败

javascript - Bacon.js 属性新值和旧值

java - 无法从 bin 读取输入文件

WPF:如何绑定(bind)到嵌套属性?

C#计算器指数函数。如何?

c# - 定期从 HttpWebRequest 写入文件与下载完成后写入文件?

c# - 如何设置NameValueCollection的长度

python - 通过 nose 或 pytest 在 Python 的单元测试中集成 argparse 脚本的建议

C# 测试资源

c# - Encog C# RBF网络,如何启动?