Вам нужен stub - объект, который будет имитировать определенные условия для вашего кода.В целях тестирования вы обычно заменяете реализацию реального объекта заглушкой (или другим типом поддельного объекта).В вашем случае рассмотрим:
public class MyClass
{
private IDataProvider dataProvider;
public void MyMethod()
{
try
{
this.dataProvider.GetData();
}
catch (OutOfMemoryException)
{
}
}
}
Теперь класс, который вы тестируете, должен быть настраиваемым на некотором уровне, чтобы вы могли легко заменить реальную реализацию DataProvider
на заглушенную / фальшивую при тестировании (как вы сказали), ты не хочешь уничтожать свою БД - никто не хочет!).Это может быть достигнуто, например, с помощью инжектора конструктора (или фактически любой другой метод инжекции зависимостей ).
Ваш тест тогда тривиален (некоторые выдуманные требования для тестирования при возникновении исключения):
[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
}