NUnit을 사용하여 애플리케이션을 테스트하고 있는데, 아래에 단순화 된 버전이 포함되어 있습니다. 모의 수업에서 이벤트를 발생시키고 테스트중인 클래스가 이벤트를 수신했는지 확인하는 방법을 찾고 있습니다.NUnit 모의 객체로 이벤트 테스트하기
응용 프로그램이 세션에서 LogIn을 호출하고 나중에 잠시 세션이 OnLoggedIn 이벤트를 시작합니다. 모의 세션을 설정하고 앱이 LogIn을 호출했는지 확인했습니다. 이제 OnLoggedIn 이벤트를 발생시키고 앱이이 이벤트를 처리하는지 확인합니다.
어떻게하면됩니까?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using NUnit.Mocks;
namespace NUnitTest
{
public delegate void LoggedInDelegate();
public interface ISession
{
void LogIn(String username, String password);
event LoggedInDelegate OnLoggedIn;
}
public class App
{
private bool loggedIn = false;
private ISession sess;
public bool LoggedIn
{
get
{
return loggedIn;
}
}
public App(ISession sess)
{
this.sess = sess;
sess.OnLoggedIn += HandleOnLoggedIn;
}
public void LogIn(String username, String password)
{
sess.LogIn(username, password);
}
public void HandleOnLoggedIn()
{
loggedIn = true;
}
}
[TestFixture]
public class AppTest
{
private String USERNAME = "Username";
private String PASSWORD = "Password";
private DynamicMock mockSess;
private App app;
[SetUp]
public void TestInit()
{
// Create objects.
mockSess = new DynamicMock(typeof(ISession));
app = new App((ISession) mockSess.MockInstance);
}
[Test]
public void TestLogin()
{
mockSess.Expect("LogIn", USERNAME, PASSWORD);
app.LogIn(USERNAME, PASSWORD);
mockSess.Verify();
mockSess.Call("OnLoggedIn");
Assert.IsTrue(app.LoggedIn);
}
}
}
이것은 좋은 솔루션이므로 엄격하게 질문에 일치하지는 않지만이를 받아 들였습니다. 링크가 NUnit-mock이 아닌 NMock2 프레임 워크를 사용합니다. 결국 Moq 프레임 워크를 사용하여 작업하기가 훨씬 쉬워졌습니다. –