【发布时间】:2014-12-10 09:37:06
【问题描述】:
我正在编写一个应用程序,在按下窗口中的按钮后,LoginWindow Loger 会通过数据库进行检查,如果传递的凭据正常。如果它返回一些东西(非空),我想检查 logger.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");
}
}
【问题讨论】:
标签: c# unit-testing events nunit moq