首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对属性更改事件进行单元测试

如何对属性更改事件进行单元测试
EN

Stack Overflow用户
提问于 2017-08-30 01:09:27
回答 1查看 2.4K关注 0票数 0

我有一个允许我处理属性事件的服务(它将在StartDateTime更改时触发),我想知道如何对此服务进行单元测试,或者如何开始对此属性更改进行单元测试。我必须模拟这个服务吗?

代码语言:javascript
运行
复制
[Export(typeof(IDriveTimeService))]
public class DriveTimeService : IDriveTimeService
{
    public void Initialize(IHasDriveTimes target)
    {
        var _driveTimeService = new DriveTimeService ();
        new DriveTimesManager(target);
    }
}

DriveTimesManager

代码语言:javascript
运行
复制
public DriveTimesManager(IHasDriveTimes target)
{
    if (target != null)
    {
        target.PropertyChanged += HandleDriveTimesChanged;
    }
}

private void HandleDriveTimesChanged(object sender, PropertyChangedEventArgs e)
{
    var driveTimes = sender as IHasDriveTimes;
    if (driveTimes != null)
    {
        if (e.PropertyName == driveTimes.GetPropertyName(t => t.StartDateTime))
        {
            driveTimes.StopDateTime += driveTimes.StartDateTime - _previousStartDateTime;
            _previousStartDateTime = driveTimes.StartDateTime;
        }

    }
}

Edit:这是我尝试过的方法,但我仍然不知道如何测试StartDateTime是否被调用

代码语言:javascript
运行
复制
[TestClass]
public class DriveTimeServiceTest
{
    [TestMethod]
    public void DriveTimeServiceNullTest()
    {
        var driveTimeService = new DriveTimeService();


        driveTimeService.Initialize(null);                
        Assert.IsNotNull(driveTimeService);
    }

    [TestMethod]
    public void DriveTimeManagerTest()
    {
        var propertyName = "";
        var mock = new Mock<IHasDriveTimes>();
        DriveTimesManager manager = new DriveTimesManager(mock.Object);

        var change = new PropertyChangedEventArgs(propertyName);
        mock.Verify(m => m.StartDateTime);
        mock.Verify(m => m.StopDateTime);

        manager.HandleDriveTimesChanged(manager, change);

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 03:42:00

我得到了帮助,并找到了解决方案。我需要的是模拟我的构造函数中的接口,然后我就可以设置这个模拟了

代码语言:javascript
运行
复制
var driveTimeService = new DriveTimeService();
        var mock = new Mock<IHasDriveTimes>().SetupAllProperties();
        mock.Object.StartDateTime = DateTimeOffset.Now.Date;
        mock.Object.StopDateTime = mock.Object.StartDateTime + TimeSpan.FromHours(2);
        driveTimeService.Initialize(mock.Object);

        mock.Object.StartDateTime += TimeSpan.FromHours(1);
        mock.Raise(t => t.PropertyChanged += It.IsAny<PropertyChangedEventHandler>(), new PropertyChangedEventArgs(mock.Object.GetPropertyName(t => t.StartDateTime)));

        Assert.AreEqual(mock.Object.StartDateTime + TimeSpan.FromHours(2), mock.Object.StopDateTime);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45944721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档