是否存在基於約束的CPython單元測試框架(與我喜愛的NUnit非常類似)還是必須自行推出?基於約束的Python單元測試框架
編輯:
這就是我所謂的基於約束的:即 http://www.nunit.org/index.php?p=constraintModel&r=2.6
代替:
assert(z.Count > 5)
它更像是:
assert.that(z.Count, Is.GreaterThan(5))
是否存在基於約束的CPython單元測試框架(與我喜愛的NUnit非常類似)還是必須自行推出?基於約束的Python單元測試框架
編輯:
這就是我所謂的基於約束的:即 http://www.nunit.org/index.php?p=constraintModel&r=2.6
代替:
assert(z.Count > 5)
它更像是:
assert.that(z.Count, Is.GreaterThan(5))
回答我自己的問題:沒有。真的,沒有意義。它在像C#/ Java這樣的語言中很有用,但在Python中不能用,比如assert([1,2,3]中的i)。
該內置庫unittest提供您尋求的功能。你會發現list of assert methods對於做出特定的斷言非常有用。
from unittest import TestCase
class SomeTest(TestCase):
def setUp(self):
self.value = 5
def testMyValue(self):
self.assertEqual(self.value, 5)
這與NUnit中的約束稍有不同,但它很容易適應,可以相當強大。
我不知道Python單元測試工具是否存在這樣的情況,但是如果您必須使用Python的功能性功能推出自己的應用程序,它似乎可以輕鬆解決。例如,我們有一個叫做assertThat功能如下:
def assertThat(val, constraint):
assert(constraint(val))
約束可以這樣定義:
def equal(testVal):
def c(val):
return testVal == val
然後,你可以使用它像這樣:
assertThat(myVal, equal(5))
這符合你期望它做的事情。
這只是它的開始;我懷疑用裝飾器,運算器模塊和一個下午的時間,你可以創建一個非常全面的非常有用的約束函數!
你可能想看看testtools,它似乎有你以後的語法。它使測試更具可讀性,並且在Python 2.6+下工作。
class TestSillySquareServer(TestCase):
def test_server_is_cool(self):
self.assertThat(self.server.temperature, Equals("cool"))
def test_square(self):
self.assertThat(self.server.silly_square_of(7), Equals(49))
謝謝!看起來我必須找到一個免費的下午並推出我自己的版本。但是Python的表現力應該很容易。我只是感到驚訝沒有人已經實施了這一點。 – Stefan
也許在測試之外的其他情況下它會很有趣... – shash