断言字符串是否是有效的 int
Asserting if a string is a valid int
我是 TDD 的新手,我 运行 在尝试编写测试时陷入困境。
我的功能:
def nonce():
return str(int(1000 * time.time()))
我已经为它写了一个测试 - 虽然它做了我想要的,但似乎 unittest
模块中应该有一些东西来处理这个?:
def test_nonce_returns_an_int_as_string(self):
n = 'abc' # I want it to deliberately fail
self.assertIsInstance(n, str)
try:
int(n)
except ValueError:
self.fail("%s is not a stringified integer!" % n)
有没有办法在没有 try/except
的情况下断言这一点?
我找到了这个 SO post,但答案没有提供 assert
afaict 的用法。
特别让我困扰的是,与使用纯 unittest.TestCase
方法相比,我的 failed test
消息没有那么漂亮和整洁。
Failure
Traceback (most recent call last):
File "/git/bitex/tests/client_tests.py", line 39, in test_restapi_nonce
int(n)
ValueError: invalid literal for int() with base 10: 'a'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "//git/bitex/tests/client_tests.py", line 41, in test_restapi_nonce
self.fail("%s is not a stringified integer!" % n)
AssertionError: a is not a stringified integer!
您可以在异常处理程序外部进行断言;这样 Python 就不会将 AssertionError
异常连接到正在处理的 ValueError
:
try:
intvalue = int(n)
except ValueError:
intvalue = None
self.assertIsNotNone(intvalue)
或测试 位数 :
self.assertTrue(n.strip().isdigit())
请注意,这仅适用于不带符号的整数字符串。 +
或 -
可以被 int()
接受,但不能被 str.isdigit()
接受。但是对于您的具体示例,使用 str.isdigit()
就足够了。
我是 TDD 的新手,我 运行 在尝试编写测试时陷入困境。
我的功能:
def nonce():
return str(int(1000 * time.time()))
我已经为它写了一个测试 - 虽然它做了我想要的,但似乎 unittest
模块中应该有一些东西来处理这个?:
def test_nonce_returns_an_int_as_string(self):
n = 'abc' # I want it to deliberately fail
self.assertIsInstance(n, str)
try:
int(n)
except ValueError:
self.fail("%s is not a stringified integer!" % n)
有没有办法在没有 try/except
的情况下断言这一点?
我找到了这个 SO post,但答案没有提供 assert
afaict 的用法。
特别让我困扰的是,与使用纯 unittest.TestCase
方法相比,我的 failed test
消息没有那么漂亮和整洁。
Failure
Traceback (most recent call last):
File "/git/bitex/tests/client_tests.py", line 39, in test_restapi_nonce
int(n)
ValueError: invalid literal for int() with base 10: 'a'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "//git/bitex/tests/client_tests.py", line 41, in test_restapi_nonce
self.fail("%s is not a stringified integer!" % n)
AssertionError: a is not a stringified integer!
您可以在异常处理程序外部进行断言;这样 Python 就不会将 AssertionError
异常连接到正在处理的 ValueError
:
try:
intvalue = int(n)
except ValueError:
intvalue = None
self.assertIsNotNone(intvalue)
或测试 位数 :
self.assertTrue(n.strip().isdigit())
请注意,这仅适用于不带符号的整数字符串。 +
或 -
可以被 int()
接受,但不能被 str.isdigit()
接受。但是对于您的具体示例,使用 str.isdigit()
就足够了。