【问题标题】:Simple way to unit test a lazy load property单元测试延迟加载属性的简单方法
【发布时间】:2011-04-19 00:38:36
【问题描述】:

我是单元测试的新手。偶然发现了一个对延迟加载属性进行单元测试的问题,并想知道是否有一个简单的解决方案:

private SubscriptionType _subscriptionType;
public SubscriptionType SubscriptionType
{
    get
    {
        if (_subscriptionType == null ||_subscriptionType.SubscriptionTypeId != this.SubscriptionTypeId)
        {
            if (this.SubscriptionTypeId !=0)
                _subscriptionType = SubscriptionType.Load(this.SubscriptionTypeId);
        }

        return _subscriptionType;
    }
}

我需要测试属性中的逻辑(if 语句)而不是实际的 SubscriptionType 加载功能 - 似乎这里最明显的方法可能是抽象 SubscriptionType.Load 并使用某种类型的 IoC 替换为模拟方法. 我只是想知道是否有任何更简单的方法可以避免这种重构——似乎只是为了编写一个正确的单元测试用例而过度设计。 你的意见? 谢谢!

【问题讨论】:

  • 看看 .NET 4 中的 Lazy 类。使用它,您将拥有更少的代码 - 甚至可能没有任何值得单元测试的东西
  • 你想测试什么?属性包含正确数据的事实还是以惰性方式加载的事实?
  • 尝试测试满足条件时调用 Load 的逻辑,否则绕过 Load

标签: c# unit-testing nunit ioc-container abstraction


【解决方案1】:

除非您想使用 TypeMock Isolator 或 Moles,否则您必须将 Load 方法隐藏在接口后面并将其注入到类中。没有办法绕过它,但你这样做不仅是为了可测试性。通常,您还倾向于从这种重构中获得更好的关注点分离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2021-02-03
    相关资源
    最近更新 更多