标签: assert

尽管有 -O(优化)标志,仍保持断言

我对程序状态进行了多次检查,其失败将表明代码中存在错误。在这种情况下,我很乐意使用,assert condition因为它比if not condition: raise MyException.

使用assert代替raise有两个问题。

  1. assert不允许指定要引发的异常,因此稍后捕获它会变得困难(捕获AssertionError可能捕获太多)。

  2. assert当 -O 标志传递给解释器时禁用。

在我的环境中,代码中的任何错误都要求我放弃所有结果,直到识别并修复该错误。因此,捕获上述检查引发的异常是没有意义的。因此,问题#1 与我的情况无关。

问题#2 很严重。我希望我的检查保留在生产代码中,因为正确性比我的环境中的性能重要得多。如今很少有人使用 -O 标志;但有一天我或其他人可能更喜欢使用它(例如,抑制后面的代码if __debug__,或者因为 -O 可能在将来实际上优化代码)。由于我的所有assert语句都必须在生产代码中保持活动状态,因此我需要将所有assert语句替换为其他语句。assert尽管有 -O 标志,有什么方法可以强制留下来吗?

顺便说一句,我计划assert通过打印导致断言失败的行中的变量值来自定义行为。我想我可以通过替换sys.excepthook为我自己的函数来实现它,该函数捕获AssertionError,读取回溯,找到相关的源代码,打印相关行中的变量,然后重新引发异常。如果有人发现有问题,请告诉我。

python interpreter assert python-3.x

2
推荐指数
1
解决办法
778
查看次数

如何将 Assert.Throws 与 property get 一起使用?

Assert.Throws我希望与属性 get 一起使用。

例如

object shouldFail = myobj[fakeField];
Run Code Online (Sandbox Code Playgroud)

我的尝试,虽然不好,但有助于证明我的需要。

Assert.Throws<MyException>(() => object shouldFail = myobj[fakeField]);
Assert.Throws<MyException>(() => myobj[fakeField]);
Run Code Online (Sandbox Code Playgroud)

我得到的语法错误是 Only assignment, call, decrement, and new object expressions can be used as a statement. 我明白那个。所以我问,如果没有 try/catch,如何测试上面示例中该行代码的异常?

我知道[ExpectedException(typeof(MyException))]

c# nunit assert exception

2
推荐指数
1
解决办法
912
查看次数

ASSERT 也适用于发布模式吗?

在哪里可以找到ASSERT类似于assert(...)标准 C++ 库中的宏(在 中定义的宏<cassert>),但它也适用于发布模式?或者说我应该怎么写呢?

我喜欢assert(...)它,因为它会自动打印源文件中断言失败的行以及断言表达式。我希望发布模式中ASSERT也能提供这些功能(如果可能的话)。

c++ assert std

2
推荐指数
1
解决办法
2953
查看次数

断言一个值完全等于 undefined

当用于qunit测试时,断言某个值具体、完全未定义是很困难的。我正在寻找一个功能,它将:

  1. 进行比较,undefined以便 的值undefined满足断言,但其他任何值(包括null)都将导致测试失败
  2. 提供有关类似于“预期未定义;得到‘foobar’”的失败的有用反馈

注意:使用strictEqualpropEqual、 或deepEqual将处理第一个条件。但是,除非在断言中专门添加为可选参数,否则这些断言函数不会在失败消息中产生有用的信息。

作为直接比较的替代方法,每当我需要做出这一断言时,我的间接方法是equal(typeof exampleValue, 'undefined')

有什么可以qunit解决这个问题吗?

javascript tdd assert undefined qunit

2
推荐指数
1
解决办法
3904
查看次数

将 Promise.all 与断言结合使用

我有一个小测试(Mocha/Chai),它测试 encryptPass 函数返回正确的哈希值:

const assert = require('chai').assert;
const bcrypt = require('bcrypt');
var encryptPass = require('../../shared/helpers/encryptPass.js');
var createUUID = require('../../shared/helpers/createUUID.js');

describe('encryptPass', function() {
    it('returns correct password hash', () => {
        var pass = createUUID();
        var encryptedPass = encryptPass(pass);
        Promise.all([pass, encryptedPass]).then(values => {
            let [pass, encryptedPass] = values;
            var compareResult = bcrypt.compareSync(pass, encryptedPass);
            assert.equal(compareResult, true);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我担心的是,断言假设 Promise.all 函数将正常工作而不会抛出错误。如何最好地处理这个问题?

assert mocha.js promise

2
推荐指数
1
解决办法
2308
查看次数

断言总是返回错误(预期“a”深度等于“a”)

我在这里做了一个简单的测试,但是我看到很多人都遇到了这个问题,但不幸的是,我无法找到解决方案,所以,因此,我要求你的意见。\n现在,我在链接内有这个字符串对象:

\n\n
...\n<div class="price">12,45&nbsp;\xe2\x82\xac</div>\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我创建了这个小测试来检查字符串值:

\n\n
import { t, Selector } from \'testcafe\';\nfixture `OfferPage`.page `https://www.verivox.de/applications/broadband/#/offer?i=eyJmaWx0ZXIiOltudWxsLDE2MDAwLDEsbnVsbCwiMDIyMSIsMSwxLDEsbnVsbCwxLDEsbnVsbCwtMSxudWxsLG51bGwsInByaWNlLWFzYyIsMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNl0sImRpYWxvZyI6W251bGxdLCJvZmZlckNyaXRlcmlhIjpbIjYxMzQ0NyIsIjE4MjkyIixudWxsLCIyNCIsMywyLCI1MDAwMCIsIjEwMDAwIixudWxsLG51bGwsMSxudWxsLG51bGwsbnVsbCwiMiIsMSxudWxsLCIwMjIxIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMSw2LG51bGwsbnVsbCxudWxsXX0%3D`;\ntest(\'1\', async () => {\n    const string = Selector(\'div.price\');\n    await t.expect(string.innerText).eql(\'12,45 \xe2\x82\xac\');\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在终端中收到的错误是这样的:

\n\n
AssertionError: expected \'12,45 \xe2\x82\xac\' to deeply equal \'12,45 \xe2\x82\xac\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我确实试图找到解决方案,但要么我正在更改定义constlet尝试应用其他方法,最终都会出现失败错误,并显示不同的错误消息。\n那么,我该如何解决问题,在上述情况下?\n谢谢!

\n\n

编辑:感谢您的提示!我编辑了这篇文章,因为我意识到我没有提到我已经尝试过你的建议......

\n\n
let price = Selector(\'div\').withAttribute(\'class\', \'price\');\nconst result = price.parent(\'div.centered-content effective-price-wrapper\');\nconsole.log(result);\nawait t.expect(result.innerText).eql(\'12,45 \xe2\x82\xac\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

呃:

\n\n
Cannot obtain information about the node because the specified selector does not match any node in the …
Run Code Online (Sandbox Code Playgroud)

automated-tests assert typescript e2e-testing testcafe

2
推荐指数
1
解决办法
6796
查看次数

如何使用 NUnit “Assert.That()”列表中的项目匹配某些条件?

我正在编写一些单元测试并想检查结果列表。

这是我正在做的一个简单的例子:

[Test]
public void FilterSomething_Test()
{
    List<MyClass> testdata = new List<MyClass>
    {
        new MyClass { SomeProperty = "expectedValue" },
        new MyClass { SomeProperty = "expectedValue" },
        new MyClass { SomeProperty = "unexpectedValue" },
        new MyClass { SomeProperty = "unexpectedValue" },
        new MyClass { SomeProperty = null },
    }

    List<MyClass> result = FilterSomething(testdata);

    Assert.That(
        result.Where(r => r.SomeProperty == "expectedValue"),
        Has.Exactly(2).Items,
        "Two Items should match this..");
}
Run Code Online (Sandbox Code Playgroud)

失败测试的输出:

两个项目应该与此匹配..

预期:正好 2 件

但是是:没有项目

输出并没有解释出了什么问题。

说明:我有多个测试的测试数据。这就是为什么我想在每次测试中检查特定项目。

我的问题:

有没有办法检查列表中的项目计数并从中获取正确的消息NUnit? …

c# nunit unit-testing assert

2
推荐指数
1
解决办法
5585
查看次数

Snowflake 中的断言

有没有办法在雪花中执行断言?

基本上,我正在尝试进行一些测试/TDD,并且我想要一种类似于其他所有语言中的断言的机制:

  • 如果断言成功,则返回 true(和/或打印成功消息)。
  • 如果断言失败,则会引发异常。

sql assert assertion snowflake-cloud-data-platform

2
推荐指数
2
解决办法
691
查看次数

如何断言数组中某个值的存在

class Configuration { String name, String type }
Configuration[] configurations = ..
Run Code Online (Sandbox Code Playgroud)

我想进行断言检查以查看数组是否在名称字段中包含某个值(比如 name="Any")。我们目前正在循环数组来检查这一点,什么是优雅的方式

java assert

2
推荐指数
1
解决办法
22
查看次数

如何在 Assert.All 函数中使用多个断言

我不确定是否可能,但我相信应该。我希望我不会错过一些很容易的事情。

我正在使用.Net CorewithXUnit并尝试在Assert.All.

一个断言正常工作,而两个断言导致编译时错误Operator '&&' cannot be applied to operands of type 'void' and 'void'.。不知道是什么意思。

这编译。

Assert.All(users, user => Assert.True(user.IsAdministrator));
Assert.All(users, user => Assert.True(user.Age >= YOUNG_AGE));
Run Code Online (Sandbox Code Playgroud)

这不编译。

Assert.All(users, user => (Assert.True(user.IsAdministrator) && Assert.True(user.Age >= YOUNG_AGE)));
Run Code Online (Sandbox Code Playgroud)

如果您能帮助我,我将不胜感激,谢谢!

c# assert xunit .net-core asp.net-core

2
推荐指数
1
解决办法
40
查看次数