【发布时间】:2025-12-15 00:30:02
【问题描述】:
我正在尝试为没有参数的方法编写单元测试。我的方法特别是我的自定义对象的 TryParse 方法。我在 Visual Studio 2013 中使用 .NET 4.5/5。这使我能够使用 PrivateType 对象完全实现私有/内部和静态对象。似乎让我无法理解的一件事是如何测试 out 参数,因为我不能在 InvokeStatic 方法中使用这个关键字。我正在寻找合适的解决方案来测试这个架构设计。
TryParse 的使用是 TypeConverter 进程的一部分,如 WebAPI Parameter Binding post By Mike Wilson 中所述
public class MyFilter
{
public string Field { get; set; }
//... removed for brevity
internal static bool TryParse(string sourceValue, out MyFilter filter)
{
//... removed for brevity
}
}
public class MyFilterTests
{
[TestMethod]
[TestCategory("TryParse")]
public void TryParseWithTitleOnly()
{
var stringSource = "{field:'DATE.FIELD'}";
MyFilter tryParseOut = null;
var target = new PrivateType(typeof(MyFilter));
var tryParseReturn = target.InvokeStatic("TryParse", stringSource, tryParseOut);
var expectedOut = new MyFilter()
{
Field = "DATE.FIELD"
};
Assert.IsTrue((bool)tryParseReturn);
Assert.AreEqual(expectedOut, tryParseOut);
}
}
【问题讨论】:
-
而 TryParse 必须是内部的?
-
因为架构设计是为了限制对外部不需要的属性的访问(关注点分离)。这迫使我们的开发人员在处理数据对象时使用正确的编码模式。
标签: c# unit-testing out