"assert False" 和 "self.assertFalse" 之间有什么优势或区别?

11 浏览
0 Comments

"assert False" 和 "self.assertFalse" 之间有什么优势或区别?

我正在编写测试,并听说有人建议使用self.assertFalse而不是assert False。为什么要这样做?有什么好处吗?

0
0 Comments

在这些回答中,迄今为止还没有提到的一点是,有几个测试框架(例如py.test和nose)使用Python的内省魔法,允许您像这样编写单元测试,而无需任何上面看到的unittest模板代码。因此,在某些情况下,这可能仅仅是一个框架/风格问题。

解决方法是使用这些测试框架来编写测试代码,而不是使用unittest框架。这样可以省去很多的模板代码,使测试代码更加简洁和易读。

0
0 Comments

在测试代码中,有时会使用assert False来表示测试出现错误,但是这种方式在出现异常时并没有提供有用的日志信息。而self.assertFalse()则会抛出一个测试失败的异常,并提供了测试失败的信息,例如错误消息和测试名称。

assert False表示出现了一个错误,即测试无法运行。而self.assertFalse()表示出现了一个失败,即测试代码虽然运行了,但是产生了错误的结果。

错误是代码中的严重问题,需要进行修复。而失败只是需要进行修正的失败。

某些情况下,assert False语句需要被删除,因为它没有提供有用的信息。

然而,有人指出这种说法是错误的。测试运行器应该(并且确实)捕获AssertionError并将其正确地报告为测试失败。

assert False语句中,可以添加一些有用的信息,例如assert False, "INFO"

0
0 Comments

在运行上述代码时,我们会得到相同的日志信息和相同的失败结果。这是因为unittest.TestCase定义了failureException = AssertionError。当你使用assert False时,会引发一个AssertionError异常。当你使用self.assertFalse(True)时,也会引发一个failureExeception异常。由于这两个异常是相同的,所以没有明显的区别。

然而,assertself.assertFalse在惯例上是不同的。assert用于声明在代码的某一点上应该满足某个条件。它在开发过程中被用作一个支撑,但不应该在生产代码中使用。如果你运行python -O my_unittest.py,所有的断言语句都会被忽略。这会破坏你对assert的预期使用,可能导致单元测试通过,即使存在失败。

尽管(不带-O标志)结果相同,但assert不应该在单元测试代码中使用。在编写单元测试时,请使用self.assertTrueself.assertFalse。而不是使用self.assertFalse(True),你可以(并且可能应该)使用self.fail()

0