在ASP中使用XUnit和NSubstitute对传递给另一个函数的字符串进行单元测试.净的核心 &



所以我有一个这样的函数,它将调用其他函数并传入一个字符串,该字符串将根据不同的条件返回。它们将始终使用普通字符串,但是如果满足某些条件,则将使用特殊字符串来传递给另一个函数。

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将是特殊的字符串,否则,将是正常的字符串?

你的函数做两件事:

  1. 获取特殊字符串,然后

  2. 处理一下

这使得测试变得困难。为什么不把字符串的获取放在一个新函数中,现在每个函数只做一件事,你可以更容易地测试:

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。在我看来,这没有对错之分。

相关内容

  • 没有找到相关文章

最新更新