2013-02-20 2 views
0

У меня есть метод, который я пытаюсь протестировать и вам нужно проверить, если ошибка была выбрана. Если репозиторий сотрудника вызывает ошибку, я хочу убедиться, что я возвращаю EmployeeServiceError. Я использую фреймворк FakeItEasy.FakeItEasy mock error in method

Вот код FakeItEasy:

// Arrange 
     var service = new EmployeeService(mockEmployeeRepository, mockCryptographer, mockApplicationUserRepository, mockEmployeeAddressRepository); 

     IEnumerable<EmployeeDTO> employeeDTOs; 

     // Act 
     employeeDTOs = service.GetEmployees(); 

     // Assert 
// How do I check the EmployeeServiceException thrown? 

     A.CallTo(() => mockEmployeeRepository.GetAllForUi()) 
      .Throws(new NullReferenceException()); 

Вот метод я тестирую:

public IEnumerable<EmployeeDTO> GetEmployees() 
     { 
      IEnumerable<EmployeeDTO> employeeDTOs = null; 

      try 
      { 
       var employees = _employeeRepository.GetAllForUi(); 
       employeeDTOs = Mapper.Map(employees, employeeDTOs); 
      } 
      catch (Exception exception) 
      { 
       throw new EmployeeServiceException(exception); 
      } 

      return employeeDTOs; 
     } 
+0

Какая тестовая среда вы используете? NUnit, XUnit, ...? Почему бы не проверить исключение, используя структуру тестирования. XUnit имеет утверждение Assert.Throws, которое обрабатывает такую ​​проверку http://goo.gl/F2Bx1 – cecilphillip

ответ

1

Использование xUnit.NET, я хотел бы сделать это:

// Arrange 
A.CallTo(() => mockEmployeeRepository.GetAllForUi()) 
    .Throws(new NullReferenceException()); 

var service = new EmployeeService(
    mockEmployeeRepository, 
    mockCryptographer, 
    mockApplicationUserRepository, 
    mockEmployeeAddressRepository); 

// Act 
var exception = Record.Exception(() => service.GetEmployees(); 

// Assert 
Assert.IsType<EmployeeServiceException>(exception); 

Record.Exception() является функцией xUnit.net. Возможно, NUnit имеет нечто подобное.

BTW - вы не должны ловить общий тип Exception в своем методе GetEmployees(), но это отдельная дискуссия.

0

Это, как я хотел бы написать его с NUnit:

A.CallTo(() => fakeEmployeeRepository.GetAllForUi()) 
    .Throws(new NullReferenceException()); 

var service = new EmployeeService(fakeEmployeeRepository, fakeCryptographer, fakeApplicationUserRepository, fakeEmployeeAddressRepository); 

Assert.Throws<EmployeeServiceException>(() => service.GetEmployees()); 

Я переименовал переменные, так как они не издевается. Для префикса их с заглушкой также будет работать.