如何使用“out”参数测试方法?

2023-12-29

我正在尝试为具有参数的方法编写单元测试。我的方法具体来说是我的自定义对象的 TryParse 方法。我正在使用 .NET 4.5/5 和 Visual Studio 2013。这使我能够使用 PrivateType 对象完全实现私有/内部和静态对象。我似乎忽略的一件事是如何测试 out 参数,因为我无法在 InvokeStatic 方法中使用此关键字。我正在寻找合适的解决方案来测试这种架构设计。

TryParse 的使用是 TypeConverter 过程的一部分,如WebAPI 参数绑定帖子 作者:Mike Wilson http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

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

就我个人而言,我会使用InternalsVisibleTo为了使该方法对您的测试代码可见,但是如果您do想要使用PrivateType,我希望你能够创建一个object[]您保留引用,将其传递到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]);

至少,我会expect工作 - 这就是反射通常处理 ref 和 out 参数的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用“out”参数测试方法? 的相关文章

  • 我想优化这个短循环

    我想优化这个简单的循环 unsigned int i while j 0 j is an unsigned int with a start value of about N 36 000 000 float sub 0 i 1 unsig
  • WritePrivateProfileString 未在末尾添加属性

    我正在使用以下命令在 ini 文件中写入一些属性WritePrivateProfileString函数并且一切正常 但是当我添加多行文本时 出现了问题 这是代码和输出 WritePrivateProfileString T General
  • 如何在样式中访问控件父级的属性

    我的列表视图将项目数据模板化为标签 我正在为该标签设计一种样式 但我不知道如何访问父级的 ListViewItem IsSelected 属性 编辑 尝试了下面的建议 但仍然出现异常 这是我的完整代码
  • 了解子表单何时关闭

    我有一个带有按钮的 Form1 当您单击按钮时 将执行以下代码块 Form2 frm new Form2 frm Name Form musteriNumarasi ToString frm Text Kullan c musteriNum
  • Mono 和 WebRequest 速度 - 测试

    在 mono 4 6 2 linux 中 我注意到 wget 下载文件的速度与webclient DownloadString 所以我做了一个小测试来调查 为什么 wget 明显比 C 快 根据我自己的实验 使用 wget 下载 手动读取文
  • 单击按钮本地化应用程序

    我在我的项目 mainMaster 页面中找到了 imageButtons
  • C 中经过的时间

    include
  • 如何从子窗口中加载的用户控件按钮关闭子窗口?

    这是我的 ChildWindow xaml 代码 1
  • WinForms TreeView - 如何手动“突出显示”节点(就像被单击一样)

    我需要知道如何让以编程方式选择的节点以图形方式处于 选定 状态 就像用户单击它一样 SelectedNode 仅使这一节点在内部被选中 非常感谢 它没有显示为突出显示的原因是由于树视图没有焦点 这是我的测试表单上的按钮单击事件 TreeVi
  • 最佳实践:从属性中抛出异常

    什么时候适合从属性 getter 或 setter 中抛出异常 什么时候不合适呢 为什么 关于这个主题的外部文档的链接会很有帮助 谷歌搜索结果出奇的少 Microsoft 在以下位置提供了有关如何设计属性的建议 http msdn micr
  • 在 C 或 C++ 中使用逗号作为宏名称

    我想做这样的事情 define define MAX 10 000 000 undef 有什么技巧可以做到吗 编辑 我知道 C 14 中的数字分隔符 我正在寻找一种技巧来对不兼容的编译器执行相同的操作 EDIT2 请考虑Variadic M
  • 使用 jest 存根函数

    有没有办法使用 jest API 来存根函数 我习惯于使用 sinon 存根 在这里我可以使用存根为来自我的测试单元的任何函数调用编写单元测试 http sinonjs org releases v1 17 7 stubs http sin
  • 当数据源中只有 1 项时 FormView 不显示 PagerTemplate

    我有一个带有自定义 PagerTemplate 的 FormView 控件和我自己的分页 LinkBut ton 一切都很好 直到我加载的数据集仅包含一个记录 项目并完全隐藏 PagerTemplate 我在网上搜索了一下 找到了几个答案
  • 模板是如何实例化的?

    这是一个练习 来自C 入门第五版 练习 16 27 对于每个带标签的语句 解释什么 如果有 实例化发生 如果实例化了模板 请解释原因 如果 不 请解释为什么不 第677页 template
  • 如何在 C# 中读取 Visio 文档内容

    我的DLL库代码如下 using System using IVisio Microsoft Office Interop Visio namespace Emix public class Visio protected String p
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • 如何在 MVC 5 中设置自定义 ClaimsPrincipal?

    我创建了一个自定义主体类 public class FacebookPrincipal ClaimsPrincipal public JObject Data get set 我想用它 当用户登录时 我尝试设置 var fbP new Fa
  • scanf() 不等待用户输入[重复]

    这个问题在这里已经有答案了 我正在使用 c 中的双向链表来制作树 我在该函数中使用递归调用 但不知何故它不起作用 我的代码是 struct node int data struct node right struct node left s
  • win32 内容已更改,但除非移动窗口,否则不会显示更新

    我的 win32 GUI 内容每秒都会更改 但除非手动移动窗口 否则不会显示更新 我尝试每秒弹出一个消息框来触发窗口刷新 它成功了 因此 这证明我的内容确实发生了变化 但窗口没有更新 我希望刷新窗口而不是每次都弹出消息框 有没有这样的窗口功

随机推荐

  • Sequelize 中的复合主键

    有人可以建议如何在同一个表中的两列上设置主键 var relation user id type DataTypes INTEGER organization id type DataTypes INTEGER 我想定义一个主键 例如 pr
  • Gatsby - 将状态属性传递给 GraphQL 查询变量/参数?

    我是 gatsby 和 graphQL 的新手 正在尝试使用此堆栈构建一个网站 该网站将显示音乐会 活动列表 我的问题是 是否可以将数据从我的应用程序状态传递到我的查询变量 在哪里连接我的状态和 graphQL 查询 这是我的代码 clas
  • 如何开始学习hadoop [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是一名网络开发人员 我拥有 JavaScript Jquery Php HTML 等 Web 技术的经验 我了解 C 的基本概念 最
  • 由于额外读取,通过网络读取文件速度变慢

    我正在读取一个文件 我要么读取一行数据 1600 次连续读取 17 字节 要么读取一列数据 1600 次读取 17 字节 间隔为 1600 17 27 200 字节 该文件位于本地驱动器或远程驱动器上 我执行了 10 次读取操作 因此我希望
  • Sphinx Docs 不导入 Django 项目设置

    我最近刚刚将 Django 项目移至新的 virtualenv 中 该项目运行良好 但我在构建 Sphinx 文档时遇到问题 在我的 conf py 中我有这个 import sys os sys path append path to m
  • 如何使用 Ruby 逐行将 csv 转换为数组?

    输入文件如下所示 dog white male cat purple female rat gray male 我想逐行检查并处理这些数据 File open animals csv while file has next line cur
  • 对于drawable文件夹中的默认资源(MDPI大小),drawable-mdpi文件夹有什么意义?

    我有各种不同像素密度的全套图像 并且我需要将位图资源放入可绘制文件夹 位于 MDPI 中以用作默认资源 以防止在我未满足的像素密度设备上崩溃 例如xhdpi 但这意味着将drawable mdpi中的资源复制到drawable文件夹中 因此
  • 读取时链接的 GZipStream/DeflateStream 和 CryptoStream (AES) 中断

    我想压缩然后加密我的数据 为了提高速度 不必写入字节数组并返回 决定将用于压缩和加密的流链接在一起 当我写入 压缩和加密 数据时 它工作得很好 但是当我尝试读取数据 解压缩和解密 时 读取操作会中断 只需调用 Read 一次即可读取 0 个
  • 如何以其他用户身份连接到数据库?

    我目前正在为一个学校项目创建一个 API 一切都运行良好 我的设置是 Node v10 Postgres Koa 等等 我目前有这个 CREATE ROLE sa WITH LOGIN PASSWORD some password CREA
  • 如何通过 API 查询 Asana 中的存档任务

    我有兴趣从 Asana 导出数据 以便我们可以从中运行报告 为此 我需要获取所有任务的列表 包括存档的任务 我对列出任务的API的理解是 如果任务被存档 那么在获取项目的任务时将不会检索到它 有没有办法查询所有任务 无论它们是否已存档 有a
  • 绘制线性回归后预测的条件密度

    这是我的数据框 data lt structure list Y c NA 1 793 0 642 1 189 0 823 1 715 1 623 0 964 0 395 3 736 0 47 2 366 0 634 0 701 1 692
  • 神经网络标准化输出数据

    我有神经网络的训练数据以及预期输出 每个输入都是 10 维向量 有 1 个预期输出 我已经使用高斯规范化了训练数据 但我不知道如何规范化输出 因为它只有单一维度 有任何想法吗 Example 原始输入向量 128 91 71 076 100
  • Import-Module 仅在从 Get-Module 进行管道传输时才有效

    I wrote a simple PowerShell module I need to keep more versions of the module All paths to versions are added to env PSM
  • case when 语句中按列号对表进行排序

    是否可以在 case when 语句中对带有列号的表进行排序 这是代码 WITH Table1 AS Table2 AS INSERT INTO temp SELECT TOP 50 one id one sales two count o
  • 在heroku上阻止IP

    我在 heroku 的文档或谷歌上都没有找到这个 通常这是在主机文件中完成的 有谁知道如何在heroku上屏蔽IP吗 Heroku 没有可用于阻止 IP 的防火墙 因此您必须在应用程序级别阻止它 或者必须在应用程序前面放置某种代理以用于阻止
  • 替换列表中的每个第二个元素

    我得到了一个二维列表 5 80 2 57 5 97 2 78 2 56 6 62 5 34 3 54 6 5 2 58 5 61 5 16 其中我需要将每个第二个元素更改为 0 从第一个元素开始 所以它应该看起来像这样 0 80 0 57
  • NuGet install.ps1 脚本中的 $package 和 $project 参数包含什么?

    我正在为 NuGet 包编写第一个安装 PowerShell 脚本 我正在尝试从以下位置复制文件lib文件夹放入tools另一个 NuGet 包的文件夹 默认的 install ps1 脚本有四个参数 其中两个是 package proje
  • 累积 R 中每个可能组合的值

    假设我有数据test 给定的 dput 其中 list col 说items test lt structure list items list a c b c c d e f c g h ID c 1 1 1 2 2 row names
  • 为每个线程创建一个非线程安全对象并使用happens-before保证

    我想将 SAAJ 中的 SOAPConnectionFactory 和 MessageFactory 类与多个线程一起使用 但事实证明我不能假设它们是线程安全的 一些相关帖子 javax xml soap MessageFactory的实例
  • 如何使用“out”参数测试方法?

    我正在尝试为具有参数的方法编写单元测试 我的方法具体来说是我的自定义对象的 TryParse 方法 我正在使用 NET 4 5 5 和 Visual Studio 2013 这使我能够使用 PrivateType 对象完全实现私有 内部和静