我想测试GetParameters()以断言返回的值在该值内包括“ test =”。不幸的是,负责此操作的方法是私有的。有什么方法可以为此提供测试范围吗?我的问题在下面突出显示:
if (info.TagGroups != null)
问题是在我的测试中info.TagGroups等于null
谢谢,
测试
[Test]
public void TestGetParameters()
{
var sb = new StringBuilder();
_renderer.GetParameters(sb);
var res = sb.ToString();
Assert.IsTrue(res.IndexOf("test=") > -1, "blabla");
}
实施类进行测试
internal void GetParameters(StringBuilder sb)
{
if (_dPos.ArticleInfo != null)
{
var info = _dPos.ArticleInfo;
AppendTag(sb, info);
}
}
private static void AppendTag(StringBuilder sb, ArticleInfo info)
{
if (info.TagGroups != null) // PROBLEM - TagGroups in test equals null
{
foreach (var tGroups in info.TagGroups)
{
foreach (var id in tGroups.ArticleTagIds)
{
sb.AppendFormat("test={0};", id);
}
}
}
}
直接测试私有方法(相对于通过类的公共API间接测试)通常是个坏主意。但是,如果需要,可以通过反射来完成。
更好的选择是将代码重构为更具可测试性。有多种方法可以执行此操作,这是一种选择:
看来您要测试的逻辑在其中AppendTag
。这是一个静态方法,并且不会修改任何状态,所以为什么不将其公开并由测试直接调用呢?
同样,您还可以GetParameters
通过为其添加附加ArticleInfo
参数来使其成为公共静态对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句