2013-02-20 54 views
0

我有一個方法,我試圖測試和需要測試是否引發錯誤。如果員工存儲庫引發錯誤,我想確保我返回EmployeeServiceError。我正在使用FakeItEasy模擬框架。方法內FakeItEasy模擬錯誤

這裏是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 2013-02-21 05:28:01

回答

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有類似的東西。

順便說一句 - 你不應該在GetEmployees()方法中捕捉到一般的Exception類型,但這是一個單獨的討論。

0

這是我怎麼會用它寫的NUnit:

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

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

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

我改名爲變量,因爲它們不是嘲笑。用stub加前綴也是可行的。