我开始使用IoC/Mocking,我希望确保我的存储库使用"最佳实践".
我正在为我的存储库设置接口.具体实现将指向SQL,而测试将使用Moq生成"假货".我注意到,我使用起订量的回调功能一个不少.在这篇文章中,作者说.
由于Moq为您希望做的大多数事情提供了这两个领域的功能,因此您需要这些工具并没有太多不同的点.事实上,如果你认为你需要使用"回调",你可能会看起来有点难以看到Moq是否可以自动执行你想做的事情.
我已经看过了,看不到任何其他方式来实现我需要的东西 - 即'假的'存储库.有人可以告诉我这里有什么东西吗?有没有办法在没有回调的情况下实现这一目标?
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
// Arrange
var mock = ContactRepositoryFake();
// Act
mock.Object.AddContact(new Contact() { Name = "bill" });
mock.Object.AddContact(new Contact() { Name = "jane" });
// Assert
Assert.IsTrue(mock.Object.AllContacts.Count() == 2);
}
public Mock<IContactRepository> ContactRepositoryFake()
{
var _allContacts = new List<Contact>();
var mock = new Mock<IContactRepository>();
mock.Setup(x=>x.AddContact(It.IsAny<Contact>()))
.Callback((Contact c) =>
{
_allContacts.Add(c);
});
mock.Setup(x => x.AllContacts).Returns(_allContacts);
return mock;
}
}
public interface IContactRepository
{
void AddContact(Contact contact);
IEnumerable<Contact> AllContacts { get; }
}
public class Contact
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你提前!欢迎任何其他建议:-)
ž
我个人认为您这样做的方式没有问题。我看到的是你想要模拟而不是存根你的存储库。这意味着您希望它在测试期间“记录”并返回数据。在这种情况下Callback
很有用,而且确实是唯一的方法。
至于评论,如果您处理存根而不是嘲笑,那么Callback
很少会被使用。这篇文章在我看来有点笼统,没有完全看到Callback
.
归档时间: |
|
查看次数: |
7358 次 |
最近记录: |