C# 单元测试惰性负载属性的简单方法

C# 单元测试惰性负载属性的简单方法,c#,unit-testing,nunit,ioc-container,abstraction,C#,Unit Testing,Nunit,Ioc Container,Abstraction,我在单元测试方面是个新手。偶然发现一个单元测试惰性负载属性的问题,并想知道是否有一个简单的解决方案: private SubscriptionType _subscriptionType; public SubscriptionType SubscriptionType { get { if (_subscriptionType == null ||_subscriptionType.SubscriptionTypeId != this.SubscriptionT

我在单元测试方面是个新手。偶然发现一个单元测试惰性负载属性的问题,并想知道是否有一个简单的解决方案:

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替换为模拟方法。 我只是想知道是否有更简单的方法来避免这种重构——仅仅为了编写一个正确的单元测试用例,这似乎有点过于工程化了。 你的想法?
谢谢

除非您想使用TypeMock隔离器或Moles,否则必须将Load方法隐藏在接口后面,并将其注入类中。这是没有办法的,但你做这件事不仅仅是为了可测试性。通常,通过这种重构,您还可以更好地分离关注点。

看看.NET4中的懒惰类。使用它,您将获得更少的代码—可能根本不值得进行单元测试—您要测试什么?属性包含正确数据的事实,或者它是以惰性方式加载的事实?尝试测试它在满足条件时调用加载的逻辑,否则将绕过加载