0 moq
我有一个类:
public class Store
{
public Store()
{
Products = new List<Product>();
}
public IList<Product> Products {get; private set;}
public void AddProduct(int id, string productCode)
{
Product p = new Product();
p.Id = id;
p.ProductCode = productCode;
//Validate before adding
Products.Add(p); //How can i verify that this was called
}
}
Run Code Online (Sandbox Code Playgroud)
使用Moq如何验证是否已调用Products List的Add方法?有人能提供一个简单的例子吗?
那么,由于在默认构造函数中设置了Products列表,你现在无法真正模拟任何东西?
最简单的方法是手动断言你的产品系列(即只是验证那里有一个带有指定ID和代码的产品)然后你根本不用担心嘲笑.
如果你真的想用Moq来测试它,你需要提供一种方法来注入你的Mock并绕过你的构造函数,例如你可以提供两个构造函数
public class Store {
public Store() : this(new List<Product>()) {
}
public Store(IList<Product> productList) {
Products = productList
}
//Implementation
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以针对add方法编写测试,如下所示
[Test]
public AddProduct_WithIdAndProductCode_AddsProductToCollection() {
int productId = 0;
string productCode = "a";
var productListMock = new Mock<IList<Product>>();
Store store = new Store(productListMock.Object);
store.AddProduct(productId, productCode);
productListMock.Verify(pl =>
pl.Add(It.Is<Product>(p =>
p.Id == productId && p.ProductCode == productCode)));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
964 次 |
| 最近记录: |