2014-12-10 3 views
2

Я пишу приложение, когда после нажатия кнопки в окне LoginWindow Loger chcecks через базу данных, если переданные учетные данные в порядке. Если он возвращает что-то (но не null), я хочу проверить, вызывает ли loger.validateuser() событие LoginSucces. Как проверить это?Проверьте, было ли событие возбуждено

namespace Komora.Classes.Loger 
{ 
public abstract class Loger 
{ 

    public delegate void LoginStatus(object sender, EventArgs e); 
    public event LoginStatus loginSucces; 
    public event LoginStatus loginFailed; 

    public abstract void validateUser(string login, string password) ; 

    protected void RaiseLoginSuccesEvent(EventArgs eventArgs) 
    { 
     if (loginSucces != null) 
     { 
      loginSucces(this, eventArgs); 
     } 
    } 

    protected void RaiseLoginFailedEvent(EventArgs eventArgs) 
    { 
     if (loginFailed != null) 
     { 
      loginFailed(this, eventArgs); 
     } 
    } 
} 
} 

namespace Komora.Classes.Loger 
{ 
public class LogerDataBase : Loger 
{ 
    #region Private Variables 
    DataBase.IDataBaseConncection dataBaseConnection; 
    #endregion 

    #region Constructor 
    public LogerDataBase(DataBase.IDataBaseConncection dataBaseConnection) 
    { 
     this.dataBaseConnection = dataBaseConnection; 
    } 
    #endregion 

    #region Derived Methods 
    public override void validateUser(string login, string password) 
    { 
     if (LogInSuccess(login, password)) 
     { 
      RaiseLoginSuccesEvent(EventArgs.Empty); 
     } 
     else 
     { 
      RaiseLoginFailedEvent(EventArgs.Empty); 
     } 
    } 
    #endregion 

    #region Private Methods 
    private bool LogInSuccess(string login, string password) 
    { 
     if (null != dataBaseConnection.getUserByCredentials(login, password)) 
      return true; 
     else 
      return false; 
    } 
    #endregion 

} 
} 

public class LogerDataBaseTests 
{ 
    [TestCase] 
    public void ValidateUserCalledWithGoodUserCredentialsRaisesLoginSuccesEventShouldPass() 
    { 
     var dataBaseConnectionMock = new Mock<Classes.DataBase.IDataBaseConncection>(); 
     dataBaseConnectionMock.Setup(m => m.getUserByCredentials(It.IsAny<string>(), It.IsAny<string>())).Returns(new object()); 

     var loger = new Classes.Loger.LogerDataBase(dataBaseConnectionMock.Object); 
     loger.validateUser("user", "pass"); 

    } 
} 

ответ

4

Просто подпишитесь тест на мероприятие и проверить, если он был поставлен:

public class LogerDataBaseTests 
{ 
    [TestCase] 
    public void ValidateUserCalledWithGoodUserCredentialsRaisesLoginSuccesEventShouldPass() 
    { 
     var dataBaseConnectionMock = new Mock<Classes.DataBase.IDataBaseConncection>(); 
     dataBaseConnectionMock.Setup(m => m.getUserByCredentials(It.IsAny<string>(), It.IsAny<string>())).Returns(new object()); 

     var loger = new Classes.Loger.LogerDataBase(dataBaseConnectionMock.Object); 

     bool successRaised = false; 
     bool failureRaised = false; 
     loginSucces += (s, e) => {successRaised = true;} 
     loginFailed += (s, e) => {failureRaised = true;} 

     loger.validateUser("user", "pass"); 

     Assert.IsTrue(successRaised); 
     Assert.IsFalse(failureRaised);    
    } 
} 
0

сделать два теста, один к одному «SucceS» для «не удалось».

[TestClass] 
public class LogerDataTest 
{ 
    [TestMethod] 
    public void validateUser_getUserByCredentialsReturnsNotNull_loginSuccesEventIsRaised() 
    { 
     // Arrange 
     const int loginSuccesExpected = 1; 
     int loginSuccesActual = 0; 
     Mock<DataBase.IDataBaseConncection> dataConnectionStub = new Mock<DataBase.IDataBaseConncection>(); 
     dataConnectionStub.Setup(db => db.getUserByCredentials("loginFake", "passwordFake")).Returns("User"); 
     LogerDataBase logerData = new LogerDataBase(dataConnectionStub.Object); 
     logerData.loginSucces += (sender, args) => 
     { 
      loginSuccesActual++; 
     }; 

     // Act 
     logerData.validateUser("loginFake", "passwordFake"); 

     // Assert 
     Assert.AreEqual(loginSuccesExpected, loginSuccesActual); 
    } 

    [TestMethod] 
    public void validateUser_getUserByCredentialsReturnsNull_loginFailedEventIsRaised() 
    { 
     // Arrange 
     const int loginFailedExpected = 1; 
     int loginFailedActual = 0; 
     Mock<DataBase.IDataBaseConncection> dataConnectionStub = new Mock<DataBase.IDataBaseConncection>(); 
     dataConnectionStub.Setup(db => db.getUserByCredentials("loginFake", "passwordFake")).Returns(null); 
     LogerDataBase logerData = new LogerDataBase(dataConnectionStub.Object); 
     logerData.loginFailed += (sender, args) => 
     { 
      loginFailedActual++; 
     }; 

     // Act 
     logerData.validateUser("loginFake", "passwordFake"); 

     // Assert 
     Assert.AreEqual(loginFailedExpected, loginFailedActual); 
    } 
} 
Смежные вопросы