我仍然在試圖讓我的周圍嘲弄頭。現在,我試圖在我的UserService
上測試我的Save
方法。因此,我正在嘲笑我的類庫使用的IRepository。不知道我怎麼莫克這個簡單的保存(用戶用戶)方法在我的.NET代碼
我不明白的是...如果我通常這個用戶保存到我的DB /存儲庫,它奇蹟般地得到一個身份,它隨後被設置成我的實例對象。沒有火箭科學的東西,在這裏。
的,我怎麼嘲笑這個我不明白?我應該關心嗎?我認爲我應該。或者..是我不關心那個..因爲我只是確保Repository方法被調用..不是那麼多,我從它得到正確的數據返回。
這裏是我的僞單元測試代碼。 (單元測試,不集成測試..因此mock'd庫)...
[TestMethod]
public void GivenANewUserWithValidData_Save_ReturnsTheSameNewUserWithAUserIdDetermined()
{
// Arrange.
var const string passwordSalt = "V4BXAhmHq8IMvR7K20TgoQ=="
var user = new User
{
DisplayName = "Test",
Email = "[email protected]",
PasswordSalt = passwordSalt ,
Password = "foobar".ToSha2Hash(passwordSalt)
};
var mockUserRepository = new Mock<IRepository<User>>();
mockUserRepository.Setup(x => x.Save(It.IsAny<User>())).Verifiable();
// Configure this repo in our Dependency Injection.
ObjectFactory.Inject(typeof (IRepository<User>), mockUserRepository.Object);
// Act.
using (new TransactionScope())
{
UserService.Save(user);
UnitOfWork.Commit(); // <-- not sure about this.. currently it's still
// an EntityFramework context.
// I need to change this to.. something??
// Assert.
Assert.IsNotNull(user);
Assert.IsTrue(user.UserId > 0);
}
}
和用戶服務看起來是這樣的..
public class UserService : IUserService
{
public UserService(IRepository<User> userRepository,
ILoggingService loggingService)
{
// .. snip ..
public void Save(User user) { .. }
}
}
有什麼建議?
是您qestion「如何嘲笑'Identity-Magic'」或「如何單元測試'Identity-Magic'」或其他什麼東西? – k3b 2011-03-17 03:42:43
@ k3b - 我的問題分兩部分。 1)我應該如何測試Save方法?我應該關心結果嗎? 2)如果我真的關心#1 ..那麼我怎麼嘲笑結果,所以我可以測試。 – 2011-03-17 04:24:18