在下面的示例中,如果我无法设置aggregationInfo对象,如何为Deaggregate()方法编写单元测试?
public class Aggregator
{
private AggregationInfo aggregationInfo;
public List Aggregate(List objects)
{
//set aggregationInfo
}
public List Deaggregate(List aggregatedObjects)
{
//use aggregationInfo for the deagregation
}
}
答案 0 :(得分:1)
我会通过调用Aggregate
然后调用Deaggregate
来测试这一点,通过调用具有不同列表的聚合并在这些情况下验证Deaggregate中的预期行为来提供不同的方案
答案 1 :(得分:1)
如果您想确保仅对方法进行单元测试,则可以执行以下操作:
public class Aggregator
{
private AggregationInfo aggregationInfo;
private readonly IAggregator aggregator;
private readonly IDeaggragator deaggragotor;
public Aggregator(IAggregator aggregator, IDeaggragator deaggragotor)
{
this.aggregator = aggregator;
this.deaggragotor = deaggragotor;
}
public List Aggregate(List objects)
{
this.aggregationInfo = aggregator.Aggregate(objects);
return someListIDontKnowWhereYouGetThisFrom;
}
public List Deaggregate(List aggregatedObjects)
{
return deaggregator.Deaggregate(objects, this.aggregationInfo);
}
}
您对Aggregator的单元测试可以像以下一样工作:
var systemUnderTest = new Aggregator(new MockAggregator(), new MockDeaggragator());
这样您就可以验证Aggregator
是否会为IAggregator
和IDeaggragotor
提供正确的参数。
最后,您还可以在单独的单元测试中测试RealDeaggragotor
,这样可以满足您的问题。
答案 2 :(得分:0)
不确定为什么你的Aggregator需要知道这些信息,那不应该是Aggregate返回值的属性吗?
public static class Aggregator
{
public static AggregatedList Aggregate(List objects)
{
// aggregate objects to aggregatedlist and set the aggregationInfo
}
public static List Deaggregate(AggregatedList aggregatedList)
{
// use info from the aggregatedList
}
}
public class AggregatedList
{
public AggregationInfo AggregationInfo { get; set; }
public List AggregatedObjects { get; set; }
}