リポジトリを定義するデータ アセンブリがあります。
次に、サービスを定義するサービス アセンブリを用意します。各サービスには、Ninject によってコンストラクターに注入されたリポジトリがあります。
サービス メソッドの単体テストを行っているときは、すべて問題ありません。
[TestClass]
public class UserTests
{
IQueryable<User> users;
int userID;
public UserTests()
{
users = new List<User>()
{
new User { EmailAddress = "known@user.com", Password = "password", ID = 1}
}.AsQueryable();
}
[TestMethod]
public void Known_User_Can_Login()
{
// Arrange
var repository = new Mock<IUserRepository>();
var service = new UserService(repository.Object);
repository.Setup(r => r.GetAll())
.Returns(users);
// Act
bool loggedIn = service.UserLogin("known@user.com", "password", out userID);
// Assert
Assert.IsTrue(loggedIn);
Assert.AreEqual(1, userID);
}
[TestMethod]
public void Unknown_User_Cannot_Login()
{
// Arrange
var repository = new Mock<IUserRepository>();
var service = new UserService(repository.Object);
repository.Setup(r => r.GetAll())
.Returns(users);
// Act
bool loggedIn = service.UserLogin("unknown@user.com", "password", out userID);
//
Assert.IsFalse(loggedIn);
}
}
ただし、コントローラーをテストするときに問題が発生しています (別のレベルダウン)。
私のコントローラーはサービスに依存しており、サービスはリポジトリに依存しています。コントローラーのテストが機能しないようです。これが私がこれまでに持っているものです:
[TestClass]
public class AccountTests
{
IQueryable<User> users;
public AccountTests()
{
users = new List<User>()
{
new User { CompanyId = 1, EmailAddress = "known@user.com", Password = "password"},
new User { CompanyId = 1, EmailAddress = "unknown@user.com", Password = "password"}
}.AsQueryable();
}
[TestMethod]
public void Known_User_Can_Login()
{
int userID = 0;
var repo = new Mock<IUserRepository>();
// Arrange
var service = new Mock<UserService>(repo.Object);
var controller = new AccountController(service.Object);
// Act
var result = controller.Login(new LoginModel { EmailAddress = "known@user.com", Password = "password" }) as RedirectToRouteResult;
// Assert
service.Verify(x => x.UserLogin("known@user.com", "password", out userID), Times.Once());
Assert.AreEqual("Index", result.RouteValues["Action"]);
}
}
UserService のインスタンス化に関するエラーが発生し続けます (UserRepository のインスタンスをそれに渡そうとしていますが、機能していません)。
私は何かばかげたことをしているに違いありませんが、何ですか?