문제

I'm using NUnit to test my application, which I've included a simplified version of below. I'm looking for a way to fire an event on a mock class, and check that the class under test has received it.

The application calls LogIn on the session, and, some time later, the session fires the OnLoggedIn event. I've set up a mock session, and checked that the app calls LogIn on it. Now I want to fire the OnLoggedIn event on it, and check that the app handles this event.

How can I do this?

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

올바른 솔루션이 없습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top