我对程序状态进行了多次检查,其失败将表明代码中存在错误。在这种情况下,我很乐意使用,assert condition因为它比if not condition: raise MyException.
使用assert代替raise有两个问题。
assert不允许指定要引发的异常,因此稍后捕获它会变得困难(捕获AssertionError可能捕获太多)。
assert当 -O 标志传递给解释器时禁用。
在我的环境中,代码中的任何错误都要求我放弃所有结果,直到识别并修复该错误。因此,捕获上述检查引发的异常是没有意义的。因此,问题#1 与我的情况无关。
问题#2 很严重。我希望我的检查保留在生产代码中,因为正确性比我的环境中的性能重要得多。如今很少有人使用 -O 标志;但有一天我或其他人可能更喜欢使用它(例如,抑制后面的代码if __debug__,或者因为 -O 可能在将来实际上优化代码)。由于我的所有assert语句都必须在生产代码中保持活动状态,因此我需要将所有assert语句替换为其他语句。assert尽管有 -O 标志,有什么方法可以强制留下来吗?
顺便说一句,我计划assert通过打印导致断言失败的行中的变量值来自定义行为。我想我可以通过替换sys.excepthook为我自己的函数来实现它,该函数捕获AssertionError,读取回溯,找到相关的源代码,打印相关行中的变量,然后重新引发异常。如果有人发现有问题,请告诉我。
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))]
在哪里可以找到ASSERT类似于assert(...)标准 C++ 库中的宏(在 中定义的宏<cassert>),但它也适用于发布模式?或者说我应该怎么写呢?
我喜欢assert(...)它,因为它会自动打印源文件中断言失败的行以及断言表达式。我希望发布模式中ASSERT也能提供这些功能(如果可能的话)。
当用于qunit测试时,断言某个值具体、完全未定义是很困难的。我正在寻找一个功能,它将:
undefined以便 的值undefined满足断言,但其他任何值(包括null)都将导致测试失败注意:使用strictEqual、propEqual、 或deepEqual将处理第一个条件。但是,除非在断言中专门添加为可选参数,否则这些断言函数不会在失败消息中产生有用的信息。
作为直接比较的替代方法,每当我需要做出这一断言时,我的间接方法是equal(typeof exampleValue, 'undefined')。
有什么可以qunit解决这个问题吗?
我有一个小测试(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 函数将正常工作而不会抛出错误。如何最好地处理这个问题?
我在这里做了一个简单的测试,但是我看到很多人都遇到了这个问题,但不幸的是,我无法找到解决方案,所以,因此,我要求你的意见。\n现在,我在链接内有这个字符串对象:
\n\n...\n<div class="price">12,45 \xe2\x82\xac</div>\n...\nRun Code Online (Sandbox Code Playgroud)\n\n我创建了这个小测试来检查字符串值:
\n\nimport { 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});\nRun Code Online (Sandbox Code Playgroud)\n\n我在终端中收到的错误是这样的:
\n\nAssertionError: expected \'12,45 \xe2\x82\xac\' to deeply equal \'12,45 \xe2\x82\xac\'\nRun Code Online (Sandbox Code Playgroud)\n\n我确实试图找到解决方案,但要么我正在更改定义const并let尝试应用其他方法,最终都会出现失败错误,并显示不同的错误消息。\n那么,我该如何解决问题,在上述情况下?\n谢谢!
编辑:感谢您的提示!我编辑了这篇文章,因为我意识到我没有提到我已经尝试过你的建议......
\n\nlet 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\');\nRun Code Online (Sandbox Code Playgroud)\n\n呃:
\n\nCannot obtain information about the node because the specified selector does not match any node in the …Run Code Online (Sandbox Code Playgroud) 我正在编写一些单元测试并想检查结果列表。
这是我正在做的一个简单的例子:
[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? …
有没有办法在雪花中执行断言?
基本上,我正在尝试进行一些测试/TDD,并且我想要一种类似于其他所有语言中的断言的机制:
class Configuration { String name, String type }
Configuration[] configurations = ..
Run Code Online (Sandbox Code Playgroud)
我想进行断言检查以查看数组是否在名称字段中包含某个值(比如 name="Any")。我们目前正在循环数组来检查这一点,什么是优雅的方式
我不确定是否可能,但我相信应该。我希望我不会错过一些很容易的事情。
我正在使用.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)
如果您能帮助我,我将不胜感激,谢谢!
assert ×10
c# ×3
nunit ×2
.net-core ×1
asp.net-core ×1
assertion ×1
c++ ×1
e2e-testing ×1
exception ×1
interpreter ×1
java ×1
javascript ×1
mocha.js ×1
promise ×1
python ×1
python-3.x ×1
qunit ×1
snowflake-cloud-data-platform ×1
sql ×1
std ×1
tdd ×1
testcafe ×1
typescript ×1
undefined ×1
unit-testing ×1
xunit ×1