From 5ca6bce0946bd93c8dd32dfbc9ecf10e054b5939 Mon Sep 17 00:00:00 2001 From: Corey McCandless Date: Tue, 17 Oct 2017 11:51:56 -0500 Subject: [PATCH 1/2] Improve exception tests --- exercises/binary-search/binary_search_test.py | 13 ++++++++----- exercises/binary/binary_test.py | 12 ++++++++---- exercises/meetup/meetup_test.py | 4 ++-- exercises/minesweeper/minesweeper_test.py | 9 ++++++--- exercises/ocr-numbers/ocr_numbers_test.py | 19 +++++++++++-------- .../pythagorean_triplet_test.py | 3 ++- exercises/saddle-points/saddle_points_test.py | 3 ++- exercises/simple-cipher/simple_cipher_test.py | 6 ++++-- exercises/triangle/triangle_test.py | 15 ++++++++++----- exercises/wordy/wordy_test.py | 13 ++++++++----- 10 files changed, 61 insertions(+), 36 deletions(-) diff --git a/exercises/binary-search/binary_search_test.py b/exercises/binary-search/binary_search_test.py index 96200e4ceb..c539d15f28 100644 --- a/exercises/binary-search/binary_search_test.py +++ b/exercises/binary-search/binary_search_test.py @@ -27,17 +27,20 @@ def test_finds_value_in_array_of_even_length(self): 5) def test_identifies_value_missing(self): - self.assertRaises(ValueError, binary_search, [1, 3, 4, 6, 8, 9, 11], 7) + with self.assertRaises(ValueError): + binary_search([1, 3, 4, 6, 8, 9, 11], 7) def test_value_smaller_than_arrays_minimum(self): - self.assertRaises(ValueError, binary_search, [1, 3, 4, 6, 8, 9, 11], 0) + with self.assertRaises(ValueError): + binary_search([1, 3, 4, 6, 8, 9, 11], 0) def test_value_larger_than_arrays_maximum(self): - self.assertRaises(ValueError, binary_search, [1, 3, 4, 6, 8, 9, 11], - 13) + with self.assertRaises(ValueError): + binary_search([1, 3, 4, 6, 8, 9, 11], 13) def test_empty_array(self): - self.assertRaises(ValueError, binary_search, [], 1) + with self.assertRaises(ValueError): + binary_search([], 1) if __name__ == '__main__': diff --git a/exercises/binary/binary_test.py b/exercises/binary/binary_test.py index 8254d7b549..28ce8fcdc0 100644 --- a/exercises/binary/binary_test.py +++ b/exercises/binary/binary_test.py @@ -32,16 +32,20 @@ def test_binary_10001101000_is_decimal_1128(self): self.assertEqual(parse_binary("10001101000"), 1128) def test_invalid_binary_text_only(self): - self.assertRaises(ValueError, parse_binary, "carrot") + with self.assertRaises(ValueError): + parse_binary("carrot") def test_invalid_binary_number_not_base2(self): - self.assertRaises(ValueError, parse_binary, "102011") + with self.assertRaises(ValueError): + parse_binary("102011") def test_invalid_binary_numbers_with_text(self): - self.assertRaises(ValueError, parse_binary, "10nope") + with self.assertRaises(ValueError): + parse_binary("10nope") def test_invalid_binary_text_with_numbers(self): - self.assertRaises(ValueError, parse_binary, "nope10") + with self.assertRaises(ValueError): + parse_binary("nope10") if __name__ == '__main__': diff --git a/exercises/meetup/meetup_test.py b/exercises/meetup/meetup_test.py index eb01a4bc32..4455bb8fbd 100644 --- a/exercises/meetup/meetup_test.py +++ b/exercises/meetup/meetup_test.py @@ -399,8 +399,8 @@ def test_fifth_monday_of_march_2015(self): meetup_day(2015, 3, 'Monday', '5th'), date(2015, 3, 30)) def test_nonexistent_fifth_monday_of_february_2015(self): - self.assertRaises(MeetupDayException, meetup_day, 2015, 2, 'Monday', - '5th') + with self.assertRaises(MeetupDayException): + meetup_day(2015, 2, 'Monday', '5th') if __name__ == '__main__': diff --git a/exercises/minesweeper/minesweeper_test.py b/exercises/minesweeper/minesweeper_test.py index f3518f3c67..542944bd04 100644 --- a/exercises/minesweeper/minesweeper_test.py +++ b/exercises/minesweeper/minesweeper_test.py @@ -141,19 +141,22 @@ def test_different_len(self): "|* |", "| |", "+-+"] - self.assertRaises(ValueError, board, inp) + with self.assertRaises(ValueError): + board(inp) def test_faulty_border(self): inp = ["+-----+", "* * |", "+-- --+"] - self.assertRaises(ValueError, board, inp) + with self.assertRaises(ValueError): + board(inp) def test_invalid_char(self): inp = ["+-----+", "|X * |", "+-----+"] - self.assertRaises(ValueError, board, inp) + with self.assertRaises(ValueError): + board(inp) if __name__ == '__main__': diff --git a/exercises/ocr-numbers/ocr_numbers_test.py b/exercises/ocr-numbers/ocr_numbers_test.py index 1fae0d1019..2be8935743 100644 --- a/exercises/ocr-numbers/ocr_numbers_test.py +++ b/exercises/ocr-numbers/ocr_numbers_test.py @@ -43,15 +43,17 @@ def test_unknown_char(self): " "]), '?') def test_too_short_row(self): - self.assertRaises(ValueError, number, [" ", - " _|", - " |", - " "]) + with self.assertRaises(ValueError): + number([" ", + " _|", + " |", + " "]) def test_insufficient_rows(self): - self.assertRaises(ValueError, number, [" ", - " _|", - " X|"]) + with self.assertRaises(ValueError): + number([" ", + " _|", + " X|"]) def test_grid0(self): self.assertEqual(grid('0'), [" _ ", @@ -114,7 +116,8 @@ def test_grid3186547290(self): ]) def test_invalid_grid(self): - self.assertRaises(ValueError, grid, '123a') + with self.assertRaises(ValueError): + grid('123a') if __name__ == '__main__': diff --git a/exercises/pythagorean-triplet/pythagorean_triplet_test.py b/exercises/pythagorean-triplet/pythagorean_triplet_test.py index 4d9b29d10d..3c46fa5be3 100644 --- a/exercises/pythagorean-triplet/pythagorean_triplet_test.py +++ b/exercises/pythagorean-triplet/pythagorean_triplet_test.py @@ -80,7 +80,8 @@ def test_is_triplet3(self): self.assertIs(is_triplet((924, 43, 925)), True) def test_odd_number(self): - self.assertRaises(ValueError, primitive_triplets, 5) + with self.assertRaises(ValueError): + primitive_triplets(5) if __name__ == '__main__': diff --git a/exercises/saddle-points/saddle_points_test.py b/exercises/saddle-points/saddle_points_test.py index 2579b05474..065b24de74 100644 --- a/exercises/saddle-points/saddle_points_test.py +++ b/exercises/saddle-points/saddle_points_test.py @@ -28,7 +28,8 @@ def test_empty_matrix(self): def test_irregular_matrix(self): inp = [[3, 2, 1], [0, 1], [2, 1, 0]] - self.assertRaises(ValueError, saddle_points, inp) + with self.assertRaises(ValueError): + saddle_points(inp) if __name__ == '__main__': diff --git a/exercises/simple-cipher/simple_cipher_test.py b/exercises/simple-cipher/simple_cipher_test.py index fb0d51f9a1..d61cbc717d 100644 --- a/exercises/simple-cipher/simple_cipher_test.py +++ b/exercises/simple-cipher/simple_cipher_test.py @@ -68,8 +68,10 @@ def test_cipher_random_key(self): 'All items in the key must be chars and lowercase!') def test_cipher_wrong_key(self): - self.assertRaises(ValueError, Cipher, 'a1cde') - self.assertRaises(ValueError, Cipher, 'aBcde') + with self.assertRaises(ValueError): + Cipher('a1cde') + with self.assertRaises(ValueError): + Cipher('aBcde') if __name__ == '__main__': diff --git a/exercises/triangle/triangle_test.py b/exercises/triangle/triangle_test.py index 6566744f5c..38d0ba422f 100644 --- a/exercises/triangle/triangle_test.py +++ b/exercises/triangle/triangle_test.py @@ -34,19 +34,24 @@ def test_very_small_triangles_are_legal(self): self.assertEqual(Triangle(0.4, 0.6, 0.3).kind(), "scalene") def test_triangles_with_no_size_are_illegal(self): - self.assertRaises(TriangleError, Triangle, 0, 0, 0) + with self.assertRaises(TriangleError): + Triangle(0, 0, 0) def test_triangles_with_negative_sides_are_illegal(self): - self.assertRaises(TriangleError, Triangle, 3, 4, -5) + with self.assertRaises(TriangleError): + Triangle(3, 4, -5) def test_triangles_violating_triangle_inequality_are_illegal(self): - self.assertRaises(TriangleError, Triangle, 1, 1, 3) + with self.assertRaises(TriangleError): + Triangle(1, 1, 3) def test_triangles_violating_triangle_inequality_are_illegal_2(self): - self.assertRaises(TriangleError, Triangle, 2, 4, 2) + with self.assertRaises(TriangleError): + Triangle(2, 4, 2) def test_triangles_violating_triangle_inequality_are_illegal_3(self): - self.assertRaises(TriangleError, Triangle, 7, 3, 2) + with self.assertRaises(TriangleError): + Triangle(7, 3, 2) if __name__ == '__main__': diff --git a/exercises/wordy/wordy_test.py b/exercises/wordy/wordy_test.py index c35fe38529..588f190481 100644 --- a/exercises/wordy/wordy_test.py +++ b/exercises/wordy/wordy_test.py @@ -49,17 +49,20 @@ def test_divide_twice(self): calculate("What is -12000 divided by 25 divided by -30?"), 16) def test_invalid_operation(self): - self.assertRaises(ValueError, calculate, "What is 4 xor 7?") + with self.assertRaises(ValueError): + calculate("What is 4 xor 7?") def test_missing_operation(self): - self.assertRaises(ValueError, calculate, "What is 2 2 minus 3?") + with self.assertRaises(ValueError): + calculate("What is 2 2 minus 3?") def test_missing_number(self): - self.assertRaises(ValueError, calculate, - "What is 7 plus multiplied by -2?") + with self.assertRaises(ValueError): + calculate("What is 7 plus multiplied by -2?") def test_irrelevant_question(self): - self.assertRaises(ValueError, calculate, "Which is greater, 3 or 2?") + with self.assertRaises(ValueError): + calculate("Which is greater, 3 or 2?") if __name__ == '__main__': From 6785c9e75240efccdb2fe02a3f635a120a7e9435 Mon Sep 17 00:00:00 2001 From: Corey McCandless Date: Tue, 17 Oct 2017 11:55:07 -0500 Subject: [PATCH 2/2] update README with new convention --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b512745695..9e26a26303 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ A list of missing exercise can be found here: http://exercism.io/languages/pytho - We use minimalistic stub files for all exercises (#272). - We use `unittest` (Python Standard Library) and no 3rd-party-framework. - We use the parameter order `self.assertEqual(actual, expected)` (#440). +- We use context managers (`with self.assertRaises(\):`) for testing for exceptions (#477). ### Testing