#c# #rhino-mocks
#c# #rhino-mocks
Вопрос:
У меня проблема, из-за которой простой метод Rhino Mock stub будет отлично работать при run
модульном тестировании, но выдаст исключение Can't create mocks of sealed classes
при выполнении в debug
режиме. Я попытался заменить Do
метод на Return
, но это не изменило поведение.
Используя C # с Rhino Mocks 3.6, приношу извинения за то, что оскорбил кого-либо, заставив функцию добавления вычитать в модульном тесте 😉
Интерфейс
public interface ICalculator
{
int Add(int value, int value2);
}
Классы
public class Calculator : ICalculator
{
public int Add(int value, int value2)
{
return value value2;
}
}
public class Sums
{
private ICalculator calculator;
public Sums(ICalculator calculatorArg)
{
calculator = calculatorArg;
}
public int Add(int value, int value2)
{
return calculator.Add(value, value2);
}
}
Модульный тест
[TestMethod()]
public void AddTest()
{
//ARRANGE
var calculatorArg = MockRepository.GenerateMock<ICalculator>();
Func<int, int, int> subtract = delegate(int valueArg, int value2Arg)
{
return valueArg - value2Arg;
};
calculatorArg.Stub(x => x.Add(-1,-1)).IgnoreArguments().Do(subtract);
Sums target = new Sums(calculatorArg);
int value = 5;
int value2 = 3;
int expected = 2;
//ACT
int actual = target.Add(value, value2);
//ASSERT
Assert.AreEqual(expected, actual);
}
Комментарии:
1. Какая версия .NET Framework? Этот код отлично работает для меня в обоих режимах под .NET 4.0 (и Rhino. Издевается над 3.6). Что произойдет, если вы используете GenerateStub вместо GenerateMock?
2. @PatrickSteele Хм, вы правы, я воссоздал проект, и он работает. Визуальная проверка между моим исходным и новым тестовыми проектами не показывает изменений — оба используют одну и ту же файловую структуру / содержимое и . Net framework (4.0). Я проведу полное сравнение и опубликую ответ
Ответ №1:
Только что возникла именно эта проблема. Я удалил скрытый файл .suo и, конечно же, он сработал.
Именно тогда я понял, что при удалении настроек параметры перехвата исключений также были удалены. Это не останавливалось ни при одном исключении. Повторное включение опции в «Debug»-> «Исключения …» привело к повторному появлению ошибки.
Однако это исключение первого шанса, поэтому простое нажатие F5 (Продолжить) перешагнет через него, и код будет выполняться фактически так, как ожидалось.
Короче говоря, решение удаления файла suo означает сброс настроек и, таким образом, игнорирование исключения.
Ответ №2:
Удалите файл suo
Объяснение: После того, как PatrickSteele любезно указал мне, что создание нового проекта с моим кодом действительно работает, я сравнил каждый файл в исходном и новом проектах и обнаружил, что отличаются только файлы suo. (кроме идентификаторов Guid, имен проектов и т.д.).
После удаления файла .suo для решения проблема была решена. Не мой любимый ответ на этот вопрос, но, тем не менее, ответ.
Комментарии:
1. Интересно… Спасибо за доработку.
2. Я только что воспроизвел эту точную проблему и исправил с помощью 3.6.0.0.