Python: assertRaises( ) not catching ldap.SERVER_DOWN error when raised
感谢您的帮助。
我尝试测试以下类方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def _get_ldap_connection(self): """ Instantiate and return simpleldap.Connection object. Raises: ldap.SERVER_DOWN: When ldap_url is invalid or server is not reachable. """ try: ldap_connection = simpleldap.Connection( self.ldap_url, encryption='ssl', require_cert=False, debug=False, dn=self.ldap_login_dn, password=self.ldap_login_password) except ldap.SERVER_DOWN: raise ldap.SERVER_DOWN( "The LDAP server specified, {}, did not respond to the" "connection attempt.".format(self.ldap_url)) |
这里是UnitTest:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def test__get_ldap_connection(self): """ VERY IMPORTANT: This test refers to your actual config.json file. If it is correctly populated, you can expect this test to fail. """ # Instantiate Class test_extractor = SakaiLdapExtractor('config_files/config.json') # Monkey with ldap server url to ensure error. test_extractor.ldap_url ="invalid_ldap_url" self.assertRaises( ldap.SERVER_DOWN, test_extractor._get_ldap_connection()) |
到目前为止,一切都很好。但是当我执行单元测试(通过nose)时,从assertraises语句调用
以下是输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | vagrant@precise64:/vagrant/sakai-directory-integration$ nosetests ...E.. ====================================================================== ERROR: VERY IMPORTANT: This test refers to your actual config.json file. ---------------------------------------------------------------------- Traceback (most recent call last): File"/vagrant/sakai-directory-integration/test_sakaiLdapExtractor.py", line 77, in test__get_ldap_connection ldap.SERVER_DOWN, test_extractor._get_ldap_connection()) File"/vagrant/sakai-directory-integration/sakai_ldap_integration.py", line 197, in _get_ldap_connection "connection attempt.".format(self.ldap_url)) SERVER_DOWN: The LDAP server specified, invalid_ldap_url, did not respond to the connection attempt. ---------------------------------------------------------------------- Ran 6 tests in 0.159s |
帮助我!
您没有正确使用
您可以将其用作上下文管理器:
1 2 | with self.assertRaises(ldap.SERVER_DOWN): test_extractor._get_ldap_connection() |
或者通常的方法(
1 | self.assertRaises(ldap.SERVER_DOWN, test_extractor._get_ldap_connection) |
还可以看到:
- 如何将单元测试的assertraises()正确地用于非类型对象?
- 在python中测试-如何在使用unittest的测试中使用断言引发?
- 文档
不调用,只传递函数(方法)本身;删除
1 2 | self.assertRaises( ldap.SERVER_DOWN, test_extractor._get_ldap_connection) |
或者,如果您使用的是最新版本的python(python 2.7+/python 3.1+),则可以使用
1 2 | with self.assertRaises(ldap.SERVER_DOWN): test_extractor._get_ldap_connection() |