当我尝试运行测试时,出现以下错误。我尝试过 IgnoreArguments()
,但这似乎不起作用。仅当我尝试 mock.Ordered()
时才会抛出此异常,如果我执行 mock.Record()
则它过去了。
System.InvalidOperationException : Previous method 'IProductRepository.GetAllProducts();' requires a return value or an exception to throw.
[Test]
public void TestwithOrderedRecordsandPlayBack()
{
var mock = new MockRepository();
var productRepository = mock.StrictMock<IProductRepository>();
var product = new Grains
{
Name = "Wonder Bread",
Category = "Grains"
};
IList list = new ArrayList();
//Class under test
var service = new ProductService(productRepository);
using (mock.Ordered())
{
Expect.Call(productRepository
.GetAllProducts())
.IgnoreArguments()
.Return(new ArrayList());
Expect.Call(()=>productRepository.SaveProduct(product));
}
using (mock.Playback())
{
list = service.GetAllProducts();
service.SaveProduct(product);
}
}
服务电话:
public virtual IList GetAllProducts()
{
IList list = _productRepository.GetAllProducts();
return list;
//throw new System.Exception("Not implemented");
}
public virtual IList GetAllProducts()
{
IList list = _productRepository.GetAllProducts();
return list;
//throw new System.Exception("Not implemented");
}
最佳答案
using (mock.Ordered())
{
Expect.Call(productRepository
.GetAllProducts())
.IgnoreArguments()
.Return(new ArrayList());
Expect.Call(() => productRepository.SaveProduct(product));
}
由于您所描述的完全相同的错误,此操作失败了。 System.InvalidOperationException:上一个方法“IProductRepository.GetAllProducts();”需要返回值或抛出异常。
原因是模拟存储库从未离开记录模式。您可能认为(我也是如此)mock.Ordered() 将存储库置于某种有序记录状态,但事实并非如此。因此,您需要指定何时完成记录行为。
您可以通过两种方式执行此操作:
using (mock.Record())
using (mock.Ordered())
{
Expect.Call(productRepository.GetAllProducts()).Return(new ArrayList());
Expect.Call(() => productRepository.SaveProduct(product));
}
或者在完成录制后删除mock.ReplayAll():
using (mock.Ordered())
{
Expect.Call(productRepository.GetAllProducts()).Return(new ArrayList());
Expect.Call(() => productRepository.SaveProduct(product));
}
mock.ReplayAll();
using (mock.Playback())
{
service.GetAllProducts();
service.SaveProduct(product);
}
我测试了两者,都有效。
关于c# - 为什么我收到此错误 : requires a return value or an exception to throw?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676652/