0
我想測試我的void存儲庫。我的服務類是這樣的。存儲庫的單元測試void方法
public class AccountService
{
private readonly IAccountRepository accountRepository;
public AccountService(IAccountRepository accountRepository)
{
this.accountRepository = accountRepository;
}
public User GetById(string userId)
{
User user = accountRepository.GetById(userId);
if (user == null)
throw new UserNotFoundException();
return user;
}
public void Add(User user)
{
accountRepository.Add(user);
}
}
在我的測試類中,我創建了一個使用FakeItEasy工具的假庫。
[TestFixture]
public class AccountServiceTests
{
private IAccountRepository repository;
private AccountService service;
private string ValidUserId = "aaa";
private string InvalidUserId = "xxx";
private List<User> getUsers()
{
return new List<User> {new User {UserId = ValidUserId}};
}
private readonly User newUser= new User();
[SetUp]
public void Setup()
{
repository = A.Fake<IAccountRepository>();
service = new AccountService(repository);
A.CallTo(() => repository.GetById(ValidUserId))
.Returns(new User{UserId = ValidUserId});
A.CallTo(() => repository.GetById(InvalidUserId))
.Returns(null);
A.CallTo(() => repository.Add(A<User>.Ignored))
.???
}
[Test]
public void GetUser_ValidUserId_ReturnsUser()
{
User user = service.GetById(ValidUserId);
Assert.IsNotNull(user);
Assert.AreEqual(ValidUserId, user.UserId);
}
[Test, ExpectedException(typeof(UserNotFoundException))]
public void GetUser_InValidUserId_ThrowsUserNotFoundException()
{
service.GetById(InvalidUserId);
}
[Test]
public void Add_User_AddsUser()
{
service.Add(newUser);
}
}
我可以測試GetUser方法的成功。但我無法測試我的服務類中的Add方法。因爲它沒有返回任何東西。或者我的服務類沒有包含用戶查詢狀態的列表。你對測試這個void方法有什麼建議?
拿什麼MustHaveHappened,wtiting只有在文檔斷言。我應該在service.Add(newUser)後使用它嗎? – barteloma
「必須發生」檢查在您調用service.Add()時,repository.Add()已被調用。如果沒有調用repository.Add(),則測試將失敗。如果有,測試將通過。 通過檢查repository.Add()被調用,您斷言調用service.Add()會調用存儲庫。然後由存儲庫來實際添加用戶。 – Dan