【发布时间】: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