如何以惯用方式使用JUnit4来测试某些代码是否会抛出异常?
虽然我当然可以这样做:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Run Code Online (Sandbox Code Playgroud)
我记得有一个注释或一个Assert.xyz或者其他东西,对于这些类型的情况来说,远不如KUndgy 和JUnit的精神.
我一直在阅读一些源代码,在一些地方我已经看到了它的用法assert
.
这究竟是什么意思?它的用途是什么?
如何使用Assert(或其他Test类?)来验证是否抛出了异常?
我正在使用GCC编译器在Linux上工作.当我的C++程序崩溃时,我希望它能自动生成一个堆栈跟踪.
我的程序由许多不同的用户运行,它也可以在Linux,Windows和Macintosh上运行(所有版本都使用编译gcc
).
我希望我的程序能够在崩溃时生成堆栈跟踪,并且在用户下次运行它时,它会询问他们是否可以将堆栈跟踪发送给我,以便我可以追踪问题.我可以处理向我发送信息,但我不知道如何生成跟踪字符串.有任何想法吗?
assert
作为标准代码的一部分使用而不是仅仅用于调试目的,是否存在性能或代码维护问题?
是
assert x >= 0, 'x is less than zero'
Run Code Online (Sandbox Code Playgroud)
好或坏比
if x < 0:
raise Exception, 'x is less than zero'
Run Code Online (Sandbox Code Playgroud)另外,有没有办法设置业务规则if x < 0 raise error
,总是在没有try/except/finally
这样的情况下进行检查,如果在整个代码中的任何时候x
小于0都会引发错误,就像你assert x < 0
在函数的开头设置一样,在函数内的任何地方哪里x
变得少于0则引发异常?
这是我通常做的,以确定输入是list
/ tuple
- 而不是a str
.因为很多次我偶然发现函数str
错误地传递了一个对象的bug ,而目标函数确实for x in lst
假设它lst
实际上是一个list
或者tuple
.
assert isinstance(lst, (list, tuple))
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有更好的方法来实现这一目标?
有人知道为什么JUnit 4提供assertEquals(foo,bar)
但不提供assertNotEqual(foo,bar)
方法吗?
它提供assertNotSame
(对应assertSame
)和assertFalse
(对应assertTrue
),所以看起来很奇怪他们没有打扰包括assertNotEqual
.
顺便说一句,我知道JUnit-addons提供了我正在寻找的方法.我只是出于好奇而问.
有没有人知道是否有一个assert
或类似的东西可以测试是否在被测试的代码中抛出异常?
assert
JavaScript 中的含义是什么?
我见过类似的东西:
assert(function1() && function2() && function3(), "some text");
Run Code Online (Sandbox Code Playgroud)
并想知道该方法的assert()
作用.
JUnit框架包含2个Assert
类(显然在不同的包中),并且每个类的方法看起来非常相似.任何人都可以解释为什么会这样吗?
我所指的课程是:junit.framework.Assert
和org.junit.Assert
.