2013-02-20 71 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加前缀也是可行的。