重试 Visual Studio C# 测试方法

2024-01-04

我很好奇是否有任何内置机制可以retry在 Visual Studio 2008 C# 单元测试框架中进行测试。 举个例子,我有一个 C# 单元测试,如下所示:

[TestMethod]
public void MyMethod() {
    DoSomething();
    Assert.Something();
}

现在,偶尔DoSomething()表现不佳;在这种情况下我想重新运行DoSomething()方法在到达断言之前。显然我可以做类似的事情:

...
do {
    Initialization();
    DoSomething();
} while (PerformedOK() == false);
Assert.Something();
...

尽管这有点麻烦,因为添加了循环并重复测试初始化​​,否则这将完全由其他方法/类构造函数处理。

我的问题是是否有更方便的机制来重试测试,例如:

DoSomething();
if (PerformedOK() == false) Retry();
else Assert.Something();

这将自动重试测试without将其注册为失败,同时照常执行所有常规初始化代码。


严重地...

有时 DoSomething() 会执行 严重地

每次测试都应该是绿色的。如果测试的代码有时执行“糟糕”,那么您需要修复代码,隔离不同的行为。您应该进行两项测试,一项是当 DoSomething 失败(并且应该失败)时断言正确,另一项是当 DoSomething 正常(并且应该正常)时断言正确。

在测试中重试逻辑在我看来是错误的。您应该始终对预期结果进行断言,并且您应该能够隔离和检测您的代码以返回您期望的结果。

[编辑-添加了一些可用于重试循环的代码]

您可以创建一个循环包装器,它接受任何方法并调用它 X 次,或者直到它成功。您还可以让 Loop 函数调用您的 init,或将其作为单独的参数传递。如果成功,该方法还可以返回布尔值。更改签名以满足您的需要。

[TestMethod]
public void something()
{
   Loop.LoopMe(TestMethod,3);            
   Assert.Something();
}

class Loop
{
    public static void LoopMe(Action action, int maxRetry)
    {
        Exception lastException = null;
        while (maxRetry > 0)
        {
            try
            {
                action();
                return;
            }
            catch (Exception e)
            {
                lastException = e;
                maxRetry--;                    
            }                
        }
        throw lastException;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重试 Visual Studio C# 测试方法 的相关文章

随机推荐

  • 使用 ggplot 函数将 geom_path 添加到箱线图时出错

    我打算创建一个箱线图并突出显示成对比较的显着性水平 这已在一个上一篇文章 https stackoverflow com questions 14958159 indicating the statistically significant
  • 在 AddObject 之后、在 SaveChanges 之前查询对象?

    在实体框架中 是否可以在调用 SaveChanges 方法之前查询刚刚使用 添加对象 添加到上下文的对象 Thanks 要持久化一个实体 您通常将其添加到它的DbSet在上下文中 例如 var bar new Bar bar Name fo
  • Git 中的 HEAD^ 和 HEAD~ 有什么区别?

    当我在 Git 中指定祖先提交对象时 我很困惑HEAD and HEAD 两者都有一个 编号 版本 例如HEAD 3 and HEAD 2 它们对我来说看起来非常相似或相同 但是波浪号和插入符号之间有什么区别吗 经验法则 Use 大多数时候
  • 使用自定义适配器时如何获取 onItemClick(ListView) 中行的 id?

    我搜索了一段时间但找不到解决方案 情况 我正在使用一个ListView我有一个CursorSQLiteDatabase query 的结果 如果我使用一个SimpleCursorAdapter 什么时候 你打电话onItemClick Ad
  • R:重新思考数据(如何重新排列一组列中的一列?)

    我有这样的表 A B C 1 a b 1 2 a b 2 3 a b 3 4 a2 b1 1 5 a3 b2 3 例如 A 列 是一个属 例如E B 列是一个物种 E coli C 列是项目的类别 无关紧要 所以我需要了解 项目 b 由多少
  • 使用gunicorn和Flask时出现CSRF令牌错误

    我开发了一个网络应用程序 其中包含用户登录和注册的功能 我已经按照文档和教程完成了所有操作 并且 Flask 服务器一切正常 问题是 我使用gunicorn并启动一个Web服务器 打开地址 localhost 8000 在几种不同的浏览器
  • 自定义 MKAnnotation 标注视图?

    我有一个MKPointAnnotation let ann MKPointAnnotation self ann coordinate annLoc self ann title Customize me self ann subtitle
  • Oracle 将行转为列[重复]

    这个问题在这里已经有答案了 我有以下表格 TABLE1 id name 1 n1 2 n2 TABLE2 id tipo valor 1 t1 v1 1 t2 v2 2 t1 v1 2 t2 v5 2 t3 v3 我试图得到 id name
  • 如何在 Django JSONField 中过滤 JSON 数组

    我对在 Django 2 0 3 中过滤 postgres JSONField 感到疯狂 json 以数组形式存储 例如 tasks task test level 10 task test 123 level 20 我尝试过的 myMod
  • grails图像绝对路径

    我的标题模板中有这张图片 img src images slide 1 jpg alt width 175 height 77 当从 main 目录内的 gsp 文件使用模板时 将加载图像 不过 如果我在控制器内的 gsp 文件中使用相同的
  • ProcessBuilder调试

    我创建了一个可执行 jar 并使用另一个 java 程序的进程构建器执行它 这是我的代码 public class SomeClass public static void main String args Process p null P
  • VB.NET 相当于 C# 的 using 指令

    我正在将一些代码从 C 转换为 VB NET 并且我需要知道 C 的 using 指令的等效项是什么 Update 抱歉 但到目前为止我还没有得到答案 这是一个 C 示例 using moOutlook Microsoft Office I
  • 在 .NET MVC4 中调用本地 Web 服务时出现 HTTP 404 错误

    我正在尝试学习 NET mvc4 中的 Web 服务 我尝试创建一个新的 Internet 应用程序并向该项目添加一个 Web 服务 asmx 默认情况下 VS 添加一个 HelloWorld Web 服务 当我尝试在浏览器中运行它时 我确
  • jasmine需要sinon.js吗?

    我在网上看到过人们使用的例子jasmine http pivotal github com jasmine 和 一起sinon http sinonjs org 然而 茉莉支持间谍 据我所知 诗乃就是这么做的 那么问题来了 诗浓在使用茉莉花
  • 由于 COMMAND_LINE_LOGGING_LEVEL 原因,无法导入 Markdown

    我遇到了一个奇怪的错误 我可以在 Python 中导入 markdown 并且可以在 Django runserver 内的 python 中导入 markdown 但是当尝试在 Gunicorn 的应用程序服务器内导入 markdown
  • 找不到网络浏览器:无法找到可运行的浏览器。 Jupyter笔记本

    Jupyter notebook 无法打开网络浏览器 之前用的好好的 后来windows 10提示更新后就开始在Microsoft Edge中打开了 当我尝试将其更改为默认浏览器 chrome 时 它根本无法打开 我跟着如何在 Window
  • 用于 Excel 克隆的正确数据结构

    假设我正在使用 C 开发 Excel 克隆 我的网格表示如下 private struct CellValue private int column private int row private string text private L
  • 如何卸载 Perl 模块?

    我在我的 Linux 机器上安装了一些 Perl 模块 如果我输入perldoc perllocal它显示了我的机器中安装的 Perl 模块的列表 但现在我不需要这些 Perl 模块 所以我想删除它们 有谁知道如何卸载或删除Linux de
  • PHP - 比较两个多维数组

    我有两个包含数据的数组 我需要比较这两个数组并创建一个最终数组 这是我的情况 grab a list of the folders folders glob GLOB ONLYDIR create empty array s which w
  • 重试 Visual Studio C# 测试方法

    我很好奇是否有任何内置机制可以retry在 Visual Studio 2008 C 单元测试框架中进行测试 举个例子 我有一个 C 单元测试 如下所示 TestMethod public void MyMethod DoSomething