コードをテスト可能にするには、依存関係をコントローラーに注入する必要があります (依存関係をコントローラーに渡すか、直接インスタンス化するかどうかは、このコードからはわかりません)。また、具体的な実装ではなく、抽象化 (できればインターフェイス) に依存するようにコントローラーを作成する必要があります。
EmployeeService は次のインターフェイスを実装する必要があります。
public interface IEmployeeService
{
EmployeeDTO GetLoggedInEmployee();
// other methods of service
}
次に、抽象化に応じてコントローラーを作成します (ここではサンプルとして 1 つの依存関係のみを示します)。
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 の詳細については、こちらをご覧ください。