Хорошо, я спросил это:Интервью Q: Использование Moq для проверки исключения, вызванного без интерфейсов?
Учитывая этот класс
public class ModelWrapper
{
private Customer _customer; // Entity Framework POCO model
public ModelWrapper(Customer model)
{
if (model == null)
throw new ArgumentNullException("model");
_customer = model;
}
}
Написать модульное тестирование с помощью Moq для тестирования The ArugmentNullException выбрасывается при переходе в нуль параметра. Примечание: Вам не нужно реализовать интерфейс
Хорошо, так что я думал, что будет работать было бы что-то подобное в XUnit:
[Fact]
public void ShouldTestArgumentNullException()
{
var test = Assert.Throws<ArgumentNullException>(
new ModelWrapper(null)
);
Assert.Equal(test.ParamName,"model");
}
И даже если это работает, это WASN» Правильный ответ. Затем я попытался это:
_mock.Setup(w => new ModelWrapper(null)).Throws(new ArgumentNullException("model"));
_mock.Verify();
, которые не работают, и я получил это исключение вместо:
Сообщение: System.ArgumentException: Expression не является вызов метода: ш => новый ModelWrapper (null)
Итак, что такое правильный ответ?
EDIT UPDATE: Мне сказали, что я могу использовать только конкретный класс в Moq, что-то вроде этого:
var _mock = new Mock<ModelWrapper>();
Но, я все еще не в состоянии понять, как это может быть сделано. Как вы видите, когда я написал код, используя конкретный класс ModelWrapper, он все равно не удался.
Может быть, лучше задать вопрос здесь http://codereview.stackexchange.com – Flexicoder
Я не вижу, как здесь можно использовать Moq. Это просто. Вызовите 'new ModelWrapper (null);' и убедитесь, что исключение было выбрано через соответствующую тестовую среду (MSTest/xUnit/whatever). – nvoigt
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что мы не можем читать ваши потенциальные мысли будущих работодателей. Технически, Moq не требуется для написания совершенно правильного модульного теста. – nvoigt