标签: assert

与断言(assert.ok)相比,assert.equal有什么优势吗?

在这个问题中,我指的是Node.js 核心中包含的断言模块。

据我所知,以下两个断言几乎相同:

assert.equal(typeof path, "string", "argument 'path' must be a string");
assert(typeof path === "string", "argument 'path' must be a string");
Run Code Online (Sandbox Code Playgroud)

失败时,两种变体都会报告相同的消息:

AssertionError: argument 'path' must be a string
Run Code Online (Sandbox Code Playgroud)

在这种情况下,前者相对于后者有什么显着的优势吗?

assert node.js

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

如何断言整个数据帧仅包含数字 dtypes?

我怎样才能最容易地断言整个数据帧只包含数字 dtypes?

python assert dataframe pandas

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

延迟后评估 NUnit 断言

我正在尝试使用 NUnit 为一种方法编写单元测试,该方法可能需要 1 到 3 秒才能完成。为了验证测试,我需要做的就是检查 aList<string> entries是否在 1 到 3 秒的跨度内增加。

我目前的解决方案是使用Thread.Sleep()

1. int currentEntries = entries.count;
2. Call methodA()
3. Thread.Sleep(3000);
4. int updatedEntries = entries.count;
5. Assert.That(updatedEntries, Is.EqualTo(currentEntries+1));
Run Code Online (Sandbox Code Playgroud)

此解决方案始终至少需要 3 秒,即使 methodA() 完成得更快。

我曾尝试使用 NUnits 延迟约束:

Assert.That(entries.Count, Is.EqualTo(currentEntries+1).After(3).Seconds.PollEvery(250).MilliSeconds);
Run Code Online (Sandbox Code Playgroud)

这本来是理想的,因为它支持轮询。但是After约束仍然会立即评估,而不是在 3 秒后评估,如这里所讨论的。

这个问题有更好的解决方案吗?

c# nunit assert assertion

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

如何以相同的顺序在另一个列表中断言一个列表

我有一个列表,其中包含最近 5 个订单日期

List<String> recentFiveOrdersDates = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

列表中的值为:

["20/07/2018", "19/07/2018", "18/07/2018", "18/07/2018", "18/07/2018"]
Run Code Online (Sandbox Code Playgroud)

我有另一个列表,其中包含所有订单日期:

List<String> AllOrderDates = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

此列表中的值为:

["20/07/2018", "19/07/2018", "18/07/2018", "18/07/2018", "18/07/2018", "17/07/2018", "17/07/2018", "16/07/2018", "16/07/2018", "12/07/2018", "12/07/2018", "17/05/2018"]
Run Code Online (Sandbox Code Playgroud)

现在我想在所有订单列表中断言最近的五个订单列表。是否可以验证它们的顺序相同?

我已经使用了hamcrestassertThat()方法,但我不确定它是否以同样的方式工作

assertThat(AllOrderDates, contains(recentFiveOrdersDates.toArray()));
Run Code Online (Sandbox Code Playgroud)

java assert hamcrest assertions

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

Hamcrest:如何测试对象中的多个多个属性

rules=[{type:"path", value:"abc"},{type:"cookie", value:"xyz"}, ...]
Run Code Online (Sandbox Code Playgroud)

我想查找数组是否包含具有属性 ( type=pathand value=abc)的对象

我试过这样的事情: assertThat(rules, hasItem(hasProperty("type", equals("path"))));

但是我没有找到将两种hasProperty方法结合起来的方法。有人能帮我吗

java assert hamcrest

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

通过 Java Streams 时 AssertThrows 不会抛出异常

所以我正在编写单元测试,其中我正在测试将用户列入黑名单和取消黑名单的能力(这是我代码中的一个功能,它本身工作正常)。

这是一个按预期工作的示例命令:

assertThrows(ExecutionException.class, () -> onlineStore.lookup("533"));
Run Code Online (Sandbox Code Playgroud)

如果我将用户“533”列入黑名单,然后运行上面的命令,它工作正常,因为 anExecutionException被引发(因为您正在尝试查找被列入黑名单的用户)。类似地,如果我没有将用户“533”列入黑名单但仍然运行上述命令,则测试将失败,这也是出于类似原因的预期(即,由于您未获取列入黑名单的用户,因此现在不会抛出异常)。

但是,如果我有一个List用户 ID userIds(用户“533”现在是其中的一部分)并且我将它们全部列入黑名单(我知道功能正常),然后运行以下命令:

userIds.stream().map(id -> assertDoesNotThrow(() -> onlineStore.lookup(id)));
Run Code Online (Sandbox Code Playgroud)

...测试通过,即使通过它也应该失败。为什么 ?因为现在所有用户都被列入黑名单,所以在获取这些用户时,ExecutionExceptions应该已经抛出..

如果我现在用以下任一命令替换上面的流命令,它们会按预期工作:

assertThrows(ExecutionException.class, () -> onlineStore.lookup("533"));

assertDoesNotThrow(() -> onlineStore.lookup("533"));
Run Code Online (Sandbox Code Playgroud)

所以这一切让我相信,出于某种原因,在通过 Java Streams 时,throwsExecutionExceptions不会被捕获。

这种行为有什么解释吗?

java junit unit-testing assert java-stream

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

在 OCaml 的断言语句中使用 &lt;&gt; 会导致错误

所以这可能是一个愚蠢的问题,但在刚开始使用 OCaml 后,我现在在 utop 中遇到了错误。我试图断言两个整数在结构上不相等。

assert 2 <> 3;;
Error: This expression has type int but an expression was expected of type
   bool because it is in the condition of an assertion
Run Code Online (Sandbox Code Playgroud)

整个语句会导致错误,但只需键入我正确断言的表达式即可计算为 true。

2 <> 3;;
- : bool = true
Run Code Online (Sandbox Code Playgroud)

我在原始断言语句中添加了括号,这解决了问题。

assert (2 <> 3);;
- : unit = ()
Run Code Online (Sandbox Code Playgroud)

我只是想知道如果没有括号,最初到底发生了什么导致错误。通常什么时候需要括号?

ocaml assert functional-programming

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

当我断言一个方法被调用时,如何通配一个字符串?Python3 模拟

mockcall()对象与 一起使用时assert_has_calls,我很难断言已使用给定字符串并在末尾附加了未知值。

例如:

被测代码:

mystring = 'a known string with an unknown value: {0}'.format(unknown_value)
method_to_call(mystring)
Run Code Online (Sandbox Code Playgroud)

当前测试代码:

with mock.patch('method_to_call') as mocked_method:
  calls = [call('a known string with and unknown value: {0}'.format(mock.ANY)]
  call_method()
  mocked_method.assert_has_calls(calls)
Run Code Online (Sandbox Code Playgroud)

这给了我一些类似的东西:

AssertionError: Calls not found.
Expected: [call('a known string with and unknown value: <ANY>')]
Run Code Online (Sandbox Code Playgroud)

如何断言给定的字符串已传递给方法但允许未知值?

unit-testing assert wildcard mocking python-3.x

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

Clojure - 关于序列的断言,使用“相同?”

在我的程序中,我试图通过编写验证我定义的函数的功能的测试来测试我的程序。在它们通过我的函数后,我正在测试序列的相等性。

my-reverse 的定义:

(defn my-reverse [coll]
  (if (empty? coll)
    []
    (conj
      (my-reverse (rest coll))
      (first coll)
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我的断言失败了,因为 (my-reverse [1]) 返回 [1]。这是断言:

(assert (identical? (my-reverse [1]) [1]))
Run Code Online (Sandbox Code Playgroud)

谢谢大家!

assert equality clojure

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

为什么c++ assert() 函数会给程序带来开销

我有练习使用c++ assert 来检查程序是否正常运行,比如这样:

cv::Mat im = imread("pic.jpg")
assert(!im);
Run Code Online (Sandbox Code Playgroud)

这将检查图像是否被正确读取。这很有用,因为图像可能没有正确放置在预期的目录中,因此我们需要检查。我觉得assert使用方便,但有人说使用assert会给程序带来开销,建议不要使用。为什么assert会带来开销?在这种情况下检查的好做法是什么?

c++ assert

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