【问题标题】:How do I use JustMock to test interface event delegates如何使用 JustMock 测试接口事件委托
【发布时间】:2013-06-23 00:25:43
【问题描述】:

我是 TDD 和单元测试的新手,我有 JustMock 商业版,还有一周的时间来学习如何使用它。下面是一个接口,一个类和一个通过的测试方法。我必须添加 Class1 faceDoesSomething 才能编译它,我还想做一个安排并断言它确实将动作设置为“微笑”。有办法吗?

编辑:我正在使用一个不使用 JustMock 的示例来使用 JustMock 创建解决方案。我意识到该示例测试了委托实际上订阅了该事件,因此在我担心它返回什么之前我需要这样做。我通过添加测试方法 ClassRegistersAsListenerForDoesSomethingEvent 修改了下面的代码,使其更接近我正在使用的示例。我相信我错过了一个断言,但我不确定。我知道测试失败了,所以我做对了。

在这个过程的某个时刻,我是否真的开始在真实类上使用测试,而不仅仅是在 Mocks 上?

public delegate void IFace1EventDelegate(object sender, IFace1 face);
public interface IFace1
{
    string Action { get; set; }
    int DoesSomethingListenerCount { get; }
    event IFace1EventDelegate DoesSomething;
}    

public class Class1
{
    public event IFace1EventDelegate DoesSomething;
    IFace1 face;
    private string action = string.Empty;
    public Class1(IFace1 Face)
{
    face = Face;
    face.DoesSomething += new IFace1EventDelegate(faceDoesSomething);
}
    public string Action
    {
        get { return action; }
        set { action = value; }
    }
    public int DoesSomethingListenerCount
    {
        get
        {
            if (DoesSomething != null)
            {
                return DoesSomething.GetInvocationList().Count();
            }
            return 0;
        }
    }
    private void faceDoesSomething(object sender, IFace1 face)
    {
    }
}

[TestMethod]
public void FaceShouldSmile()
{
    // arrange
    var Smiley = Mock.Create<IFace1>();
    var Classy = Mock.Create<Class1>(Smiley);
    Mock.Arrange(() => Classy.Action).Returns("Frown");
    // act
    string s = Classy.Action;
    // assert
    Assert.AreEqual("Frown", s);
}
[TestMethod]
public void ClassRegistersAsListenerForDoesSomethingEvent()
{
    // arrange
    var Smiley = Mock.Create<IFace1>();
    var Classy = Mock.Create<Class1>(Smiley);
    // act
    int listenersCountAfter = 1;
    int actualListenersCount = Classy.DoesSomethingListenerCount;
    // assert
    Assert.AreEqual(listenersCountAfter, actualListenersCount);
}

【问题讨论】:

    标签: testing interface delegates justmock


    【解决方案1】:

    我正在通过阅读“单元测试的艺术”来学习单元测试,并且也被困在模拟事件订阅中。但是在使用方法和参数之后,我找到了解决方案:

    [Test]
    public void VerifyAttachesToViewEvents()
    {
        var viewMock = Mock.Create<IView>();
        Mock.ArrangeSet(() => viewMock.Load += null).IgnoreArguments().OccursOnce();
        var presenter = new Presenter(viewMock);
        Mock.AssertAll(viewMock);
    }
    

    【讨论】:

    • 哦,经过几分钟寻找更好的解决方案后,我在official Telerik's forums找到了完全相同的示例
    • 谢谢,我的谷歌福很弱。
    猜你喜欢
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多