所以我有一个这样的函数,它将调用其他函数并传入一个字符串,该字符串将根据不同的条件返回。它们将始终使用普通字符串,但是如果满足某些条件,则将使用特殊字符串来传递给另一个函数。
public async Task Func(context)
{
var stringToBeUsed = GetNormalString(context);
if (FirstConditionFulfilled(context) &&
(SecondConditionFulfilled(context))
{
stringToBeUsed = GetSpecialString(context);
}
await DoSthElse(context, stringToBeUsed );
}
这是get normal字符串函数
private string GetNormalString(context)
=> context.HttpContext.DoSthToGetNormalString().ToString();
这是get特殊字符串函数
private string GetSpecialString(context)
=> context.HttpContext.DoSthToGetSpecialString().ToString;
我想知道我应该如何设置单元测试,看看是否满足某些条件,stringToBeUsed将是特殊的字符串,否则,将是正常的字符串?
你的函数做两件事:
-
获取特殊字符串,然后
-
处理一下
这使得测试变得困难。为什么不把字符串的获取放在一个新函数中,现在每个函数只做一件事,你可以更容易地测试:
public string GetTheRightString(context){ //new function you can easily test
var stringToBeUsed = GetNormalString(context);
if (FirstConditionFulfilled(context) &&
(SecondConditionFulfilled(context))
{
stringToBeUsed = GetSpecialString(context);
}
return stringTobeUsed;
}
public async Task Func(context)
{
var stringToBeUsed = GetTheRightString(context);
await DoSthElse(context, stringToBeUsed );
}
但是你可能不想让那个方法公开。如果你保持它的隐私,你想测试它(这是一个话题,有些人非常教条,你不应该这样做。我不同意)看这里。或者你把方法放在一个新类中,并把它设为public/internal。在我看来,这没有对错之分。