C# 检查是否引发了事件
如果传递的凭据正常,则在通过数据库按下窗口登录Windows Loger chcecks中的按钮后,我正在编写应用程序。如果它返回非null的内容,我想检查loger.validateuser是否引发LoginSucces事件。如何测试它C# 检查是否引发了事件,c#,unit-testing,events,nunit,moq,C#,Unit Testing,Events,Nunit,Moq,如果传递的凭据正常,则在通过数据库按下窗口登录Windows Loger chcecks中的按钮后,我正在编写应用程序。如果它返回非null的内容,我想检查loger.validateuser是否引发LoginSucces事件。如何测试它 namespace Komora.Classes.Loger { public abstract class Loger { public delegate void LoginStatus(object sender, EventArgs e);
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);
}
}
进行两次测试,一次为“成功”,一次为“失败”
[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);
}
}