gpt4 book ai didi

unit-testing - 如何干净地对自定义 ValueResolver ResolveCore(...) 方法进行单元测试

转载 作者:行者123 更新时间:2023-12-04 13:34:54 25 4
gpt4 key购买 nike

我正在尝试对自定义 ValueResolver (Automapper) 进行单元测试,但遇到了问题,因为它强制我覆盖的方法没有直接暴露在我们必须创建的自定义对象中。我覆盖了 protected 方法“ResolveCore”,但唯一公开的公共(public)方法是“Resolve”,它需要一个复杂的“ResolutionResult”自动映射器对象作为输入。在真正的单元测试中,我想单独测试这个对象/方法,并且不想走通过映射启动 automapper 的路线来做这个测试。同样,不可能模拟“ResolutionResult”,并且为每个测试设置似乎是一个非常复杂的对象(再次需要创建/关联其他 Automapper 对象)。

我能想出的唯一(不太理想的)解决方案(并且在谷歌搜索解决方案时已经看到建议)是在暴露 protected 覆盖方法的类中 stub 一个公共(public)方法。如果我们必须沿着这条路线走,那就这样吧,但是有没有其他人有更好的解决方案来单独测试方法调用,而不需要修改我们试图测试的对象?

示例代码:

public class CustomResolver : ValueResolver<Supplier, string>
{
protected override string ResolveCore(Custom source)
{
return string.Format("{0} {1}", source.Name, source.Descripton);
}

public string UnitTestStub(Custom source)
{
return ResolveCore(source);
}
}

最佳答案

我不会在您的类(class)中放置公共(public) stub 。相反,我只需在我的单元测试程序集中创建一个简单的子类,它会公开我想要测试的调用:

public class TestCustomResolver : CustomResolver
{
public string TestResolveCore(Custom source)
{
return this.ResolveCore(source);
}
}

其中一些取决于您使用的单元测试框架。例如,您可以使用 InternalsVisibleTo() 属性将您的内部结构暴露给您的单元测试。但是,我会倾向于在您的单元测试中使用一个简单的子类。

关于unit-testing - 如何干净地对自定义 ValueResolver ResolveCore(...) 方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5080433/

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