Minitest is inspired by Ruby minispec.
Project description
This project is inspired by Ruby minispec, but now it just implement some methods including:
must_equal, must_true, must_false, must_raise.
And some other useful functions:
p, pp, pl, ppl, length, size, inject, flag_test
github: https://github.com/jichen3000/minitest
pypi: https://pypi.python.org/pypi/minitest
How to install
pip install minitest
How to use
if __name__ == '__main__': # import the minitest from minitest import * import operator # declare a variable for test tself = get_test_self() # you could put all your test variables on tself # just like declare your variables on setup. tself.jc = "jc" # declare a test with test(object.must_equal): tself.jc.must_equal('jc') None.must_equal(None) with test(object.must_true): True.must_true() False.must_true() with test(object.must_false): True.must_false() False.must_false() # using a funcation to test equal. with test("object.must_equal_with_func"): (1).must_equal(1, key=operator.eq) (1).must_equal(2, key=operator.eq) def div_zero(): 1/0 # test exception with test("test must_raise"): (lambda : div_zero()).must_raise(ZeroDivisionError) (lambda : div_zero()).must_raise(ZeroDivisionError, "integer division or modulo by zero") (lambda : div_zero()).must_raise(ZeroDivisionError, "in") # when assertion fails, it will show the failure_msg with test("with failure_msg"): the_number = 10 (the_number % 2).must_equal(1, failure_msg="{0} is the number".format(the_number)) # it wont show the failure_msg (the_number % 2).must_equal(0, failure_msg="{0} is the number".format(the_number)) (True).must_false( failure_msg="{0} is the number".format(the_number)) (lambda : div_zero()).must_raise(ZeroDivisionError, "in", failure_msg="{0} is the number".format(the_number))
result:
Running tests: .FFFF. Finished tests in 0.013165s. 1) Failure: File "/Users/Colin/work/minitest/test.py", line 29, in <module>: EXPECTED: True ACTUAL: False 2) Failure: File "/Users/Colin/work/minitest/test.py", line 32, in <module>: EXPECTED: False ACTUAL: True 3) Failure: File "/Users/Colin/work/minitest/test.py", line 38, in <module>: EXPECTED: 2 ACTUAL: 1 4) Failure: File "/Users/Colin/work/minitest/test.py", line 47, in <module>: EXPECTED: 'in' ACTUAL: 'integer division or modulo by zero' 5) Failure: File "/Users/colin/work/minitest/test.py", line 86, in <module>: MESSAGE: '10 is the number' EXPECTED: 1 ACTUAL: 0 6) Failure: File "/Users/colin/work/minitest/test.py", line 92, in <module>: MESSAGE: '10 is the number' EXPECTED: False ACTUAL: True 7) Failure: File "/Users/colin/work/minitest/test.py", line 95, in <module>: MESSAGE: '10 is the number' EXPECTED: 'in' ACTUAL: 'integer division or modulo by zero' 10 tests, 18 assertions, 7 failures, 0 errors. [Finished in 0.1s]
Other useful function
p, pp, pl, ppl, length, size, inject, flag_test these six functions could been used by any object.
p, print with title. This function will print variable name as the title. code:
value = "Minitest" value.p() value.p("It is a value:") value.p(auto_get_title=False)
print result:
value : 'Minitest' It is a value: 'Minitest' 'Minitest'
pp, pretty print with title. This function will print variable name as the title in the first line, then pretty print the content of variable below the title. code:
value = "Minitest" value.pp() value.pp("It is a value:") value.pp(auto_get_title=False)
print result:
value : 'Minitest' It is a value: 'Minitest' 'Minitest'
pl, print with title and code loction. This function just like pt, but will print the code location at the first line. And some editors support to go to the line of that file, such as Sublime2. code:
value = "Minitest" value.pl() value.pl("It is a value:") value.pl(auto_get_title=False)
print result:
File "/Users/Colin/work/minitest/test.py", line 76 value : 'Minitest' File "/Users/Colin/work/minitest/test.py", line 77 It is a value: 'Minitest' File "/Users/Colin/work/minitest/test.py", line 78 'Minitest'
ppl, pretty print with title and code loction. This function just like ppt, but will print the code location at the first line. Notice: it will print a null line firstly. code:
value = "Minitest" value.ppl() value.ppl("It is a value:") value.ppl(auto_get_title=False)
print result:
File "/Users/Colin/work/minitest/test.py", line 76 value : 'Minitest' File "/Users/Colin/work/minitest/test.py", line 77 It is a value: 'Minitest' File "/Users/Colin/work/minitest/test.py", line 78 'Minitest'
length and size will invoke len function for the caller’s object. code:
[1,2].length() # 2, just like len([1,2]) (1,2).size() # 2, just like len((1,2))
inject_customized_must_method or inject function will inject the function which you customize. Why do I make this function? Since in many case I will use numpy array. When it comes to comparing two numpy array, I have to use:
import numpy numpy.array([1]).must_equal(numpy.array([1.0]), numpy.allclose)
For being convient, I use inject_customized_must_method or inject function like:
import numpy inject(numpy.allclose, 'must_close') numpy.array([1]).must_close(numpy.array([1.0]))
flag_test will print a message ‘There are codes for test in this place!’ with the code loction. code:
flag_test() # add a title flag_test("for test")
print result:
File "/Users/colin/work/minitest/test.py", line 97, in <module>: There are test codes in this place! File "/Users/colin/work/minitest/test.py", line 101, in <module>: for test : There are test codes in this place!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file minitest-1.5.1.tar.gz
.
File metadata
- Download URL: minitest-1.5.1.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4175671a072dfef398b41ca48e260849a60255ecc45dc6ab13cb5c08bea4403 |
|
MD5 | 84ef4d4824eefc4a686b2cb3e878b9cd |
|
BLAKE2b-256 | d17faecc2ff9f74d8d88af19890746d91eed4f9ccc6b717c14ca9785b7310257 |