【发布时间】:2018-11-30 10:43:43
【问题描述】:
我正在使用 NJsonSchema 来验证 JSON 输入。
我有一个小类,它采用ValidationError 对象的集合,并使用每个验证错误的内容创建更多用户友好的错误消息。
我希望能够为这个类编写单元测试,但是我遇到了一个问题。我的班级中的一个消息处理程序负责处理 NotInEnumeration 错误,为此它使用 ValidationError 中保存的 JsonSchema4 对象中的 Enumeration 属性并创建格式正确的错误消息。
在为这个特定的处理程序编写测试时,我发现以下内容是非法的:
JsonSchema4 enumSchema = new JsonSchema4();
enumSchema.Enumeration = new List<object>{ "A", "B", "C" };
这是因为 Enumeration 属性有一个内部设置器。
我需要能够设置验证错误的枚举,因为对象需要传递给 ValidationError 的构造函数,然后由我的处理程序稍后读取,如下所示。
private string NotInEnumerationHandler(ValidationError error)
{
var userFriendlyErrorString = "Answer must be within range: ";
var enumString = "[" + string.Join<object>(", ", error.Schema.Enumeration) + "]";
userFriendlyErrorString += enumString;
return userFriendlyErrorString;
}
我无法使用 moq 模拟 JsonSchema4 对象,因为 moq 不允许模拟非虚拟方法。
基本上细节并不重要,但我想知道是否有任何方法可以设置内部设置器,以便我可以在我的类中测试这个特定方法。
【问题讨论】:
-
您可以使用
AssemblyInfo.cs中的InternalsVisibleTo-属性使您的测试程序集成为您正在测试的系统的朋友项目。这样您也应该能够访问内部设置器。 -
枚举是一个ICollection。为什么不简单地 Add() 你需要的项目?
-
@IvayloStoev 你知道什么时候只见树木不见森林吗?
-
一直发生在我身上:-)
标签: c# njsonschema