gpt4 book ai didi

c# - 单元测试 c# 和测试私有(private)方法的问题

转载 作者:太空狗 更新时间:2023-10-29 22:26:41 25 4
gpt4 key购买 nike

我想测试 GetParameters() 以断言返回值在值中包含“test=”。不幸的是,负责这个的方法是私有(private)的。有没有办法为此提供测试覆盖率?我遇到的问题突出显示如下:

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);
}
}
}
}

最佳答案

直接测试私有(private)方法(而不是通过类的公共(public) API 间接测试)通常不是一个好主意。但是,如果需要,您可以通过反射来完成。

更好的选择是重构您的代码以使其更易于测试。有许多方法可以做到这一点,这里是一个选项:

看起来您要测试的逻辑在AppendTag 中。这是一个静态方法,不修改任何状态,那么为什么不将其公开并直接由测试调用呢?

以同样的方式,您也可以通过给它一个额外的 ArticleInfo 参数来使 GetParameters 成为 public static。

关于c# - 单元测试 c# 和测试私有(private)方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19809423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com