您需要的是stub - 将模拟您的代码的某些条件的对象。出于测试目的,您通常会将实际对象实现替换为存根(或其他类型的伪造对象)。你的情况,考虑:
public class MyClass
{
private IDataProvider dataProvider;
public void MyMethod()
{
try
{
this.dataProvider.GetData();
}
catch (OutOfMemoryException)
{
}
}
}
现在,你正在测试应在一定程度上可配置类 - 让您可以轻松地与存根代替真正的DataProvider
执行/测试时伪造了一个(像你说的,你不”不想破坏你的数据库 - 没有人愿意!)。这可以通过例如构造器注入(或者实际上,任何其他dependency injection技术)来实现。然后
您的测试是微不足道的(当异常被抛出一些虚构的要求来测试):
[Test]
public void MyMethod_DataProviderThrowsOutOfMemoryException_LogsError()
{
var dataProviderMock = new Mock<IDataProvider>();
dataProviderMock
.Setup(dp => dp.GetData())
.Throws<OutOfMemoryException>();
var myClass = new MyClass(dataProviderMock);
myClass.MyMethod();
// assert whatever needs to be checked
}
您的代码示例并不能真正说明你的问题。为什么你不能模拟电源故障?你是否试图“注入”会导致所提到的异常被抛出的条件?什么是真正的问题? – 2012-01-13 13:56:03
是的,就像在http://stackoverflow.com/a/8851628/79379,但没有我摧毁一个数据库,以模拟数据库faluire。 – 2012-01-13 14:02:04