Testing 如何使用JustMock测试接口事件委托

Testing 如何使用JustMock测试接口事件委托,testing,interface,delegates,justmock,Testing,Interface,Delegates,Justmock,我是TDD和单元测试的新手,我只有一个商业版和一周的时间来学习如何使用它。下面是通过的接口、类和测试方法。我不得不添加Class1 FaceDoesMethod来编译它,我还想做一个整理并断言它确实将动作设置为“微笑”。有什么方法可以做到这一点吗 编辑:我正在使用一个不使用JustMock的示例来创建使用JustMock的解决方案。我意识到该示例测试委托实际上订阅了事件,所以在我担心它返回什么之前,我需要这样做。我修改了下面的代码,添加了一个测试方法ClassRegisterAsListener

我是TDD和单元测试的新手,我只有一个商业版和一周的时间来学习如何使用它。下面是通过的接口、类和测试方法。我不得不添加Class1 FaceDoesMethod来编译它,我还想做一个整理并断言它确实将动作设置为“微笑”。有什么方法可以做到这一点吗

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

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

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);
}
public delegate void iface1ventdelegate(对象发送方,IFace1面);
公共接口IFace1
{
字符串操作{get;set;}
int DoesSomethingListenerCount{get;}
事件IFACE1事件删除方法;
}    
公共班级1
{
公共事件,如果1事件删除方法;
IFace1面部;
私有字符串操作=string.Empty;
公共一级(IFace1面部)
{
面=面;
face.DoesMething+=新的IFace1EventDelegate(FacesDoesMething);
}
公共字符串操作
{
获取{return action;}
设置{action=value;}
}
public int doesMethingListenerCount
{
得到
{
如果(DoesMething!=null)
{
返回doesMething.GetInvocationList().Count();
}
返回0;
}
}
私有void facedoesmething(对象发送方,IFace1 face)
{
}
}
[测试方法]
公众虚无的脸应该微笑
{
//安排
var Smiley=Mock.Create();
var Classy=Mock.Create(Smiley);
Mock.Arrange(()=>Classy.Action).Returns(“皱眉”);
//表演
字符串s=Classy.Action;
//断言
主张平等(“皱眉”,s);
}
[测试方法]
public void类注册表AsListenerForDoesSomethingEvent()
{
//安排
var Smiley=Mock.Create();
var Classy=Mock.Create(Smiley);
//表演
int listenersuntafter=1;
int actualistenerscount=Classy.doesMethingListenerCount;
//断言
Assert.AreEqual(listenersCountAfter,actualListenersCount);
}

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

[Test]
public void VerifyAttachesToViewEvents()
{
    var viewMock = Mock.Create<IView>();
    Mock.ArrangeSet(() => viewMock.Load += null).IgnoreArguments().OccursOnce();
    var presenter = new Presenter(viewMock);
    Mock.AssertAll(viewMock);
}
[测试]
公共无效验证AttacheStovieEvents()
{
var viewMock=Mock.Create();
Mock.ArrangeSet(()=>viewMock.Load+=null).IgnoreArguments().ocursonce();
var presenter=新的presenter(viewMock);
Mock.AssertAll(viewMock);
}

噢,在搜索了几分钟更好的解决方案后,我在Thank you上找到了完全相同的例子,我的Google Fu很弱。