2011-10-03 34 views

回答

0

回答我自己的問題:沒有。真的,沒有意義。它在像C#/ Java這樣的語言中很有用,但在Python中不能用,比如assert([1,2,3]中的i)。

1

該內置庫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中的約束稍有不同,但它很容易適應,可以相當強大。

2

我不知道Python單元測試工具是否存在這樣的情況,但是如果您必須使用Python的功能性功能推出自己的應用程序,它似乎可以輕鬆解決。例如,我們有一個叫做assertThat功能如下:

def assertThat(val, constraint): 
    assert(constraint(val)) 

約束可以這樣定義:

def equal(testVal): 
    def c(val): 
     return testVal == val 

然後,你可以使用它像這樣:

assertThat(myVal, equal(5)) 

這符合你期望它做的事情。

這只是它的開始;我懷疑用裝飾器,運算器模塊和一個下午的時間,你可以創建一個非常全面的非常有用的約束函數!

+0

謝謝!看起來我必須找到一個免費的下午並推出我自己的版本。但是Python的表現力應該很容易。我只是感到驚訝沒有人已經實施了這一點。 – Stefan

+0

也許在測試之外的其他情況下它會很有趣... – shash

0

你可能想看看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))