Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用'测试方法;输出';参数?_C#_Unit Testing_Out - Fatal编程技术网

C# 如何使用'测试方法;输出';参数?

C# 如何使用'测试方法;输出';参数?,c#,unit-testing,out,C#,Unit Testing,Out,我试图为一个没有参数的方法编写一个单元测试。我的方法是一个专门用于自定义对象的TryParse方法。我正在Visual Studio 2013中使用.NET 4.5/5。这允许我使用PrivateType对象完全实现私有/内部和静态对象。有一件事似乎让我无法理解,那就是如何测试out参数,因为我不能在InvokeStatic方法中使用这个关键字。我正在寻找合适的解决方案来测试这种架构设计 TryParse的使用是TypeConverter过程的一部分,如中所述 就我个人而言,我会使用Intern

我试图为一个没有参数的方法编写一个单元测试。我的方法是一个专门用于自定义对象的TryParse方法。我正在Visual Studio 2013中使用.NET 4.5/5。这允许我使用PrivateType对象完全实现私有/内部和静态对象。有一件事似乎让我无法理解,那就是如何测试out参数,因为我不能在InvokeStatic方法中使用这个关键字。我正在寻找合适的解决方案来测试这种架构设计

TryParse的使用是TypeConverter过程的一部分,如中所述


就我个人而言,我会使用
InternalsVisibleTo
以使方法对测试代码可见,但如果您确实想使用
PrivateType
,我希望您能够创建一个
对象[]
,并保留对该对象的引用,将其传递到
InvokeStatic
,然后再次获取值:

object[] args = new object[] { stringSource, null };
var tryParseReturn = target.InvokeStatic("TryParse", args);

...

// args[1] will have the value assigned to the out parameter
Assert.AreEqual(expectedOut, args[1]);

至少,我认为这是可行的——反射通常就是这样处理ref和out参数的。

而TryParse必须是内部的?因为架构设计是限制对外部不需要的属性的访问(关注点分离)。这迫使我们的开发人员在处理数据对象时使用正确的编码模式。
args
没有传递给
InvokeStatic
,或者我遗漏了什么?@haim770 InvokeStatic有几个接口,我在这个场景中尝试使用的接口在这里有文档记录@谢谢,这其实是我应该做的。我全神贯注于以这种方式测试所有其他静态进程,我忘记了我可以为“内部”进程这样做,以便与其他程序集“交朋友”@JonSkeet@haim770是的,Jon Skeet的解决方案有效。我没有IComparer,所以我必须显式地计算Assert.IsEqual(预期的,实际的),但是其他测试现在正在运行。
object[] args = new object[] { stringSource, null };
var tryParseReturn = target.InvokeStatic("TryParse", args);

...

// args[1] will have the value assigned to the out parameter
Assert.AreEqual(expectedOut, args[1]);