爲了使代碼可測試,應該向控制器注入依賴關係(如果將依賴關係傳遞給控制器,或直接實例化它們,這段代碼並不清楚)。你也應該讓你的控制器依賴於抽象(最好是接口)而不是具體的實現。
的EmployeeService應該實現此接口:
public interface IEmployeeService
{
EmployeeDTO GetLoggedInEmployee();
// other methods of service
}
然後你讓你的控制器依賴於抽象(這裏顯示的樣品只有一個依賴):
public class FooController : Controller
{
private IEmployeeService _employeeService;
public FooController(IEmployeeService employeeService)
{
_employeeService = employeeService;
}
}
現在你可以嘲笑的依賴,並開始寫作控制器測試(NUnit和Moq樣品):
[Test]
public void ShouldProvideEmployeeDetails()
{
// Arrange
EmployeeDTO bob = new EmployeDTO("Bob", 42);
Mock<IEmployeeService> employeeService = new Mock<IEmployeeService>();
employeeService.Setup(s = s.GetLoggedInEmployee()).Returns(bob);
FooController controller = new FooController(employeeService.Object);
// Act
var result = controller.Details() as ViewResult;
// Assert
EmployeeModel model = result.ViewData.Model;
Assert.That(model.Title, Is.EqualTo("Bob"));
Assert.That(model.Controller, Is.EqualTo("LoanProcessor"));
}
然後編寫代碼來通過這個測試。 您可以在TDD here上閱讀更多信息。
沒有你首先回答以下問題,你的問題就無法回答:什麼是「this.EmployeeService」?什麼是「彙編器」?什麼是GetEmployeeNameTitle方法?什麼是MainNavTabs.LoanProcessor? –