2011-01-08 2 views
1

Я пытаюсь проверить объект «SqlGymSessionRepository», который принимает int при инициализации. Если параметр не задан, я хочу, чтобы он выдал ошибку. Я не могу понять, как это должно работать. У меня есть что-то вроде этого:Тестирование Mocked object constructor

[TestMethod] 
[ExpectedException(typeof(ArgumentNullException))] 
public void Throw_Exception_If_Not_Session_Id() 
{ 
    var mockRepos = new Mock<SqlGymSessionRepository>(); 
} 

Я не уверен, где должен быть проверен конструктор?

ответ

4

Вы не хотите издеваться над классом (реализацией), который вы тестируете. Вы хотите издеваться над зависимостями от класса. Если вы тестируете SqlGymSessionRepository, то вы не хотите его издеваться, вы хотите его реализовать. Издевательский относится к любым другим классам, от которых зависит SqlGymSessionRepository, которые вы затем предоставили ему для своих тестов.

Вызовите конструктора напрямую.

1

Если вы хотите проверить, конструктор, назовем его:

new SqlGymSessionRepository(null); 

Update в комментариях:

Вы о том, что он принимает обнуляемого Int. Тогда компилятор будет гарантировать, что он всегда будет вызываться с null или целочисленным значением. Если null является недопустимой инициализацией, ваш код должен генерировать исключение, и вы можете проверить это. Вам не нужно проверять, что метод вызывается без параметра. C# статически типизирован, поэтому код не будет компилироваться, если не указано значение для всех необходимых параметров.

+0

Проблемы в том, что, поскольку объект требует ввода int, я не могу создать его с нулевым тестированием excpetion, так как есть ошибка времени компиляции? – hoakey

+0

Как выглядит код в конструкторе? Если конструктор принимает int, вы не можете передать значение null, поэтому нет необходимости проверять это. Если он принимает int ?, вы можете передать значение null и проверить это. – driis

+0

Это просто не принимает значение null. Я согласен, что его можно вызвать без int. В этом случае вместо того, чтобы писать исключение, я должен просто позволить ему сбросить системную ошибку? – hoakey