gpt4 book ai didi

c# - 检查事件是否被引发

转载 作者:行者123 更新时间:2023-11-30 20:46:06 25 4
gpt4 key购买 nike

如果传递的凭据正常,我正在编写一个应用程序,当在窗口 LoginWindow Login 中按下按钮后,Loger 通过数据库检查。如果它返回某些东西(非空),我想检查 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");

}
}

最佳答案

只需将您的测试订阅到该事件并检查它是否被引发:

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);
}
}

关于c# - 检查事件是否被引发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com