





















Rhino Mocks是TDD(测试驱动开发)中一个非常重要的组件,这篇文章简单地介绍下这个组件mock的使用。创建2个项目,

using System;
namespace RhinoMockProject
{
public abstract class ProductBase
{
public abstract string Name { get; set; }
public abstract decimal Price { get; set; }
public abstract void Save();
}
}
[TestMethod]
public void TestStubAbstract()
{
ProductBase product = MockRepository.GenerateStub<ProductBase>();
product.Name = "Laptop Computer";
product.Price = 3200.00m;
Assert.AreEqual(3200.00m, product.Price);
}
public interface IProduct
{
string Name { get; set; }
decimal Price { get; set; }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RhinoMockProject
{
public class ProductManager
{
public static void DoublePrice(IProduct product)
{
product.Price *= 2;
}
}
}
[TestMethod]
public void TestStubInterface()
{
decimal price = 3200.00m;
IProduct product = MockRepository.GenerateStub<IProduct>();
product.Name = "Laptop Computer";
product.Price = price;
ProductManager.DoublePrice(product);
Assert.AreEqual(price * 2, product.Price);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RhinoMockProject
{
public interface IProductRepository
{
IProduct Get(int ProductId);
IEnumerable<IProduct> Select();
bool Save(IProduct product);
}
}
private IEnumerable<IProduct> _fakeProducts = new List<IProduct>
{
new Product {Name = "Steak", Price = 9.85m},
new Product {Name = "Milk", Price = 2.02m},
new Product {Name = "Diapers", Price = 33.07m}
};
[TestMethod]
public void TestStubInterfaceMethod()
{
MockRepository mocks = new MockRepository();
IProductRepository products = mocks.Stub<IProductRepository>();
using (mocks.Record())
{
SetupResult.For(products.Select()).Return(_fakeProducts);
}
var results = products.Select();
Assert.AreEqual(3, results.Count());
}
[TestMethod]
public void TestStubMultipleReturn()
{
MockRepository mocks = new MockRepository();
IProductRepository products = mocks.Stub<IProductRepository>();
using (mocks.Record())
{
SetupResult
.For(products.Get(2))
.Return(new Product { Name = "Beer", Price = 12.99m });
SetupResult
.For(products.Get(12))
.Return(new Product { Name = "Steak", Price = 8.02m });
}
// Test
IProduct product1 = products.Get(2);
Assert.AreEqual("Beer", product1.Name);
IProduct product2 = products.Get(12);
Assert.AreEqual("Steak", product2.Name);
IProduct product3 = products.Get(13);
Assert.IsNull(product3);
}
[TestMethod]
public void TestStubIgnoreArguments()
{
MockRepository mocks = new MockRepository();
IProductRepository products = mocks.Stub<IProductRepository>();
using (mocks.Record())
{
SetupResult
.For(products.Get(1))
.IgnoreArguments()
.Return(new Product { Name = "Beer", Price = 12.99m });
}
// Test
IProduct product1 = products.Get(2);
Assert.AreEqual("Beer", product1.Name);
IProduct product2 = products.Get(12);
Assert.AreEqual("Beer", product2.Name);
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。