Предизвикателства > Валидатор за Никулденска рецепта > Решения > Решението на Станислава Желязкова

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

3 успешни теста
1 неуспешни теста
Код

 1import unittest
 2from unittest.mock import patch, mock_open
 3from secret import validate_recipe, RuinedNikuldenDinnerError
 4
 5
 6class TestNikuldenValidator(unittest.TestCase):
 7    def test_valid_recipe(self):
 8        mock_file_content = "Рецепта за приготвяне на вкусна риба"
 9        with patch("builtins.open", mock_open(read_data=mock_file_content)):
10            self.assertTrue(validate_recipe("file1.txt"))
11
12        mock_file_content = "Рецепта за Риба"
13        with patch("builtins.open", mock_open(read_data=mock_file_content)):
14            self.assertTrue(validate_recipe("file2.txt"))
15        
16        mock_file_content = " Рецепта за приготвяне на рибена глава"
17        with patch("builtins.open", mock_open(read_data=mock_file_content)):
18            self.assertTrue(validate_recipe("file3.txt"))
19
20        mock_file_content = " Рецепта за приготвяне на Рибена глава"
21        with patch("builtins.open", mock_open(read_data=mock_file_content)):
22            self.assertTrue(validate_recipe("file4.txt"))
23        
24        mock_file_content = "Рецепта за пълнен Шаран"
25        with patch("builtins.open", mock_open(read_data=mock_file_content)):
26            self.assertTrue(validate_recipe("file5.txt"))
27
28        mock_file_content = "Рецепта за пълнен шаран"
29        with patch("builtins.open", mock_open(read_data=mock_file_content)):
30            self.assertTrue(validate_recipe("file6.txt"))
31        
32        mock_file_content = "Рецепта за Сьонга с аспержи на фурна"
33        with patch("builtins.open", mock_open(read_data=mock_file_content)):
34            self.assertTrue(validate_recipe("file7.txt"))
35
36        mock_file_content = "Рецепта за сьонга с аспержи на фурна"
37        with patch("builtins.open", mock_open(read_data=mock_file_content)):
38            self.assertTrue(validate_recipe("file8.txt"))
39        
40        mock_file_content = "Рецепта за приготвяне на риба, рибена глава, шаран,сьонга"
41        with patch("builtins.open", mock_open(read_data=mock_file_content)):
42            self.assertTrue(validate_recipe("file9.txt"))
43
44    def test_invalid_recipe(self):
45        mock_file_content = "Рецепта за кекс"
46        with patch("builtins.open", mock_open(read_data=mock_file_content)):
47            self.assertFalse(validate_recipe("file10.txt"))
48        
49        mock_file_content = ""
50        with patch("builtins.open", mock_open(read_data=mock_file_content)):
51            self.assertFalse(validate_recipe("file11.txt"))
52        
53        mock_file_content = "\n\n    \n"
54        with patch("builtins.open", mock_open(read_data=mock_file_content)):
55            self.assertFalse(validate_recipe("file12.txt"))
56
57        mock_file_content = "р#ба"
58        with patch("builtins.open", mock_open(read_data=mock_file_content)):
59            self.assertFalse(validate_recipe("file13.txt"))
60    
61    def test_bad_recipe_file(self):
62        with patch("builtins.open", side_effect=OSError("File not found")):
63            with self.assertRaises(RuinedNikuldenDinnerError):
64                validate_recipe("file14.txt")
65        
66        with patch("builtins.open", side_effect=IOError("Cannot read file")):
67            with self.assertRaises(RuinedNikuldenDinnerError):
68                validate_recipe("file15.txt")
69
70if __name__ == "__main__":
71    unittest.main()

F...
======================================================================
FAIL: test_naive_in_validator (test.TestTestNikuldenValidator.test_naive_in_validator)
Test with implementation missing word splits.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 92, in test_naive_in_validator
self.assertFalse(result.wasSuccessful(),
AssertionError: True is not false : Expecting test_invalid_recipe to fail with an implementation missing word splits.

----------------------------------------------------------------------
Ran 4 tests in 0.047s

FAILED (failures=1)

Дискусия
Станислава Желязкова
08.12.2024 17:48

Благодаря за обратната връзка!:)
Виктор Бечев
07.12.2024 12:26

Не обяснявам на всички защо им фейлват тестовете на тестовете, но понеже твоите са супер изчерпателни, ми се прииска да го направя. Единственият _(скрит)_ requirement, който си пропуснала да тестваш е за рецепти, които съдържат думата като под-низ - `"Никулден е празник на рибарите и още други хора"`. В тази "рецепта" имаш `"рибарите"` и тъй като ние тестваме с няколко счупени имплементации, една от тях не взима предвид такова поведение и съответно би било хубаво тестовете да го хванат. Затова имаш и 1 фейлващ тест.
История
Това решение има само една версия.