public string Name {get; set;}
public string Password {get; set;}
public DateTime LastLogin {get;set;}
public interface IDbStorage
public class LoginManager
private readonly IDbStorage _storage;
public LoginManager(IDbStorage storage)
public void LogIn(LoginModel model)
model.LastLogin = DateTime.UtcNow;
public class LoginManagerTests
public void LogIn_should_update_lastlogin_field()
var storageMoq = new Mock<IDbStorage>();
var manager = new LoginManager(storageMoq.Object);
var model = new LoginModel
LastLogin = DateTime.MinValue
Assert.True((model.LastLogin - DateTime.UtcNow).Seconds <= 1);
public void LogIn_should_save_model_in_db()
var storageMoq = new Mock<IDbStorage>();
var manager = new LoginManager(storageMoq.Object);
var model = new LoginModel
LastLogin = DateTime.MinValue
storageMoq.Verify(c => c.Save(model), Times.Once());