标签: assert

如何禁用程序断点/断言?

我正在使用Visual Studio,开发本机应用程序,我在使用__asm int 3或__debugbreak放置的代码中有一个程序断点(断言).有时当我点击它时,我想禁用它,以便在同一个调试会话中的连续命中不再进入调试器.我怎样才能做到这一点?

debugging x86 assert debugbreak visual-studio

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

如何在C/C++中将assert放入发布版本中

我只需要运行ship build,我需要在发布版本中断言某些条件以查看问题是否已修复.我该怎么做?

c c++ assert release

17
推荐指数
3
解决办法
3万
查看次数

是否应该覆盖等于在单元测试中断言对象相等性的方法?

假设我们通过使用预期结果对象的属性断言结果对象的所有属性的相等性来测试方法的结果.我们应该实现equals方法并使用Assert.AreEqual(expectedResult,actualResult)......但是equals可能意味着生产代码中存在不同的东西.

哪种是最佳做法?

  • 通过重写equals方法断言对象的相等性

要么

  • 断言所有属性的相等性

unit-testing assert equals assertions

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

测试前提条件的不同方法的优缺点?

在我的脑海中,我可以想到4种方法来检查空参数:

Debug.Assert(context != null);
Contract.Assert(context != null);
Contract.Requires(context != null);
if (context == null) throw new ArgumentNullException("context");
Run Code Online (Sandbox Code Playgroud)

我总是使用最后一种方法,但我刚看到一个使用过的代码片段,Contract.Requires我对此并不熟悉.每种方法有哪些优点/缺点?还有其他方法吗?


在VS2010 w/Resharper中,

  • Contract.Assert 警告我表达式总是正确的(它怎么知道,我不太确定...... HttpContext不能为空吗?),
  • Contract.Requires 变得淡出它告诉我编译器不会调用该方法(我假设因为前一个原因,它永远不会为null),并且
  • 如果我将最后一个方法更改为context != null以下所有代码都会逐渐消失,它会告诉我代码是启发式无法访问的.

因此,似乎最后3种方法在VS静态检查器中内置了某种智能,并且Debug.Assert只是愚蠢.

c# assert constraints code-contracts preconditions

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

NUnit Assert.Equals vs. Assert.AreEqual

有什么区别:

  • Assert.EqualsAssert.AreEqual
  • Assert.NotNullAssert.IsNotNull
  • ...

nunit assert

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

Groovy'断言':如何显示价值?

如何在groovy中显示值是真还是假?我正在使用Eclipse作为我的IDE.

    assert 4 * ( 2 + 3 ) - 6 == 14 //integers only
Run Code Online (Sandbox Code Playgroud)

而且我也不理解Groovy中的"断言".它是否像Java中的if()语句/ boolean?

"断言"在Groovy中扮演什么角色?

groovy assert

17
推荐指数
2
解决办法
4万
查看次数

在Linux上断言失败后继续调试?

当在Windows上使用Visual C++断言失败时,调试器会停止,显示消息,然后让您继续(或者,如果没有运行调试会话,则提供为您启动Visual Studio).

在Linux上,似乎assert()的默认行为是显示错误并退出程序.由于我的所有断言都通过宏,我试图使用信号来解决这个问题,比如

#define ASSERT(TEST) if(!(TEST)) raise(SIGSTOP);
Run Code Online (Sandbox Code Playgroud)

但是虽然GDB(通过KDevelop)停在正确的位置,但我似乎无法继续通过信号,并且在GDB内手动发送信号只会让我感到不知所措,无论是GDB还是调试过程都无法控制.

c c++ linux gdb assert

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

可靠地确定数组中的元素数量

每个C程序员都可以使用这个众所周知的宏来确定数组中元素的数量:

#define NUM_ELEMS(a) (sizeof(a)/sizeof 0[a])
Run Code Online (Sandbox Code Playgroud)

这是一个典型的用例:

int numbers[] = {2, 3, 5, 7, 11, 13, 17, 19};
printf("%lu\n", NUM_ELEMS(numbers));          // 8, as expected
Run Code Online (Sandbox Code Playgroud)

但是,没有什么能阻止程序员意外地传递指针而不是数组:

int * pointer = numbers;
printf("%lu\n", NUM_ELEMS(pointer));
Run Code Online (Sandbox Code Playgroud)

在我的系统上,这打印2,因为显然,指针是整数的两倍.我想过如何防止程序员错误地传递指针,我找到了一个解决方案:

#define NUM_ELEMS(a) (assert((void*)&(a) == (void*)(a)), (sizeof(a)/sizeof 0[a]))
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为指向数组的指针与指向其第一个元素的指针具有相同的值.如果改为传递指针,指针将与指向自身的指针进行比较,这几乎总是假的.(唯一的例外是递归的void指针,也就是指向自身的void指针.我可以忍受它.)

意外地传递指针而不是数组现在在运行时触发错误:

Assertion `(void*)&(pointer) == (void*)(pointer)' failed.
Run Code Online (Sandbox Code Playgroud)

太好了!现在我有几个问题:

  1. 我的用法是assert逗号表达式的左操作数有效标准C吗?也就是说,标准是否允许我assert用作表达式?对不起,如果这是一个愚蠢的问题:)

  2. 可以在编译时以某种方式完成检查吗?

  3. 我的C编译器认为这int b[NUM_ELEMS(a)];是一个VLA.有没有办法说服他呢?

  4. 我是第一个想到这个吗?如果是这样,我可以期待在天堂等待多少处女?:)

c arrays assert pointers sizeof

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

如何在单元测试中检查值是否为nan?

我有功能,有时返回NaNs float('nan')(我不使用numpy).

我怎么为它写一个测试,因为

assertEqual(nan_value, float('nan'))
Run Code Online (Sandbox Code Playgroud)

就像float('nan') == float('nan')总是假的.可能有类似的东西assertIsNan吗?我找不到任何关于它的东西......

python unit-testing assert nan

16
推荐指数
3
解决办法
6486
查看次数

Node.js断言库与其他断言库

根据node.js断言库文档:

该模块供Node.js内部使用,但可以通过require('assert')在应用程序代码中使用.但是,assert不是测试框架,并不打算用作通用断言库.

我在看Chai作为替代断言库(没有BDD API,只有断言API),最后我看到断言功能非常相似.

为什么Chai的断言库是一个更好的断言库?它完成了除node.js之外的所有工作(除了在可用的断言方面更加丰富,但这只是语法糖涂层).即使是简单的事情,例如执行的assert总数也不可用.

我错过了什么吗?

javascript unit-testing assert node.js

16
推荐指数
3
解决办法
3846
查看次数