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