Prompt file imported from snowman-se/meta-template-for-assignment2 (
.github/prompts/implement-test.admin.prompt.md). Copyright stays with the author.
/implement-test.admin
ç®ç
æ¬ãªããžããªã¯ãåŠçã®ããã°ã©ãã³ã°èª²é¡ãCIã§èªåæ¡ç¹ããŸãã
/implement-test.admin ã§ã¯ãrelease/README.md ã«èšèŒããã課é¡å
容ãåºã«ã
åŠçãå®è£
ãã¹ãæ©èœã«å¯Ÿå¿ãããã¹ãã³ãŒãã tests/stages/stage-XX é
äžã«å®è£
ãã
å®éã«ãã¹ããå®è¡ããããšã§èª²é¡å
容ãšã®æŽåæ§ãæ€èšŒããŸãã
åææ¡ä»¶
/readme.adminãå®è¡æžã¿ã§release/README.mdãäœæãããŠããããš
æé
-
release/README.mdã®å 容ã確èªãã課é¡å 容ãçè§£ããŠãã ããã -
å ±éã¯ãŒã¯ãã㌠ã«åŸãããã©ã³ã
feature/implement-testsãäœæããŠãã ããã -
tests/stages/stage-XXé äžã«ã課é¡å 容ã«å¯Ÿå¿ãããã¹ãã³ãŒããå®è£ ããŠãã ããã- åãã¹ãã¯
pytestãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠå®è£ ããŠãã ããã - åã¹ããŒãžã®ãã¹ãã³ãŒãã¯ã課é¡ã®åæ©èœã«å¯Ÿå¿ããããã«èšèšããŠãã ããã
- åã¹ããŒãžçšãã£ã¬ã¯ããª
tests/stages/stage-XXã«ã¯ã察å¿ããã¹ããŒãžçªå·ã«åºã¥ãããã¹ããã¡ã€ã«ã1ã€ã®ã¿äœæããŠãã ããã - åãã¹ããã¡ã€ã«å
ã§ã¯ã以äžã®ã«ãŒã«ã§ãã¹ããå®è£
ããŠãã ããã
- å
šãŠã®ãã¹ã颿°ã«ã¯ã
@pytest.mark.stageXXãã³ã¬ãŒã¿ãä»äžããŠãã ããïŒXXã¯ã¹ããŒãžçªå·ïŒã - ãã¹ã察象ã®ã¢ãžã¥ãŒã«ãã¯ã©ã¹ã®ã€ã³ããŒãã¯ã
pytest.iniã®ã«ãŒã«ã«åŸã£ãŠã å¿ ã ãã¹ã颿°å ã§è¡ã£ãŠãã ããã - 1ã€ã®ãã¹ã颿°å ã«ã¯ãåºæ¬çã«1ã€ã®ã¢ãµãŒã·ã§ã³ã®ã¿ãå«ããŠãã ããã
- åã¢ãµãŒã·ã§ã³ã®äžã®è¡ã«ã¯ãäœããã¹ãããŠããã®ããåŠçã«ãšã£ãŠæç¢ºã«ãªããããæ¥æ¬èªã®ã³ã¡ã³ãã远å ããŠãã ããã
- å
šãŠã®ãã¹ã颿°ã«ã¯ã
- å®è£
äŸ:
# tests/stages/stage-01/test_bank_account.py import pytest @pytest.mark.stage01 def test_bank_account_exists(): from kadai.bank_account import BankAccount # éè¡å£åº§ã¯ã©ã¹ãååšããããšã確èªãã assert BankAccount is not None # <... ä»ã® stage-01 ãã¹ã颿°ãåæ§ã«å®è£ ...>
- åãã¹ãã¯
-
ãã¹ãã³ãŒããå®è£ ããããå®éã«çåŸã課é¡ã宿œããæé ãæ³å®ããŠã以äžã®ãããŒã§ãã¹ããæ€èšŒããŠãã ããã
æ€èšŒäžããã¹ãã³ãŒãåŽã«åé¡ãèŠã€ãã£ãå Žåã¯ãé©å®ä¿®æ£ãè¡ã£ãŠãã ããã4.1 ã¹ããŒãž1ã®æ€èšŒ
4.1.1 ãã¹ãå®è¡åã®ç¢ºèª
ãŸãããªããžããªã®ã«ãŒããã£ã¬ã¯ããªã«ããããšã確èªããŸãã
pwd # æåŸ ãããåºå: /path/to/Meta-Template-for-Assignment4.1.2 ãã¹ãã®å€±æã確èªïŒREDïŒ
å®è£ åã®ç¶æ ã§ãã¹ããŒãž1ã®ãã¹ããå®è¡ãããã¹ãã倱æããããšã確èªããŸãã
pytest -m stage01 -væåŸ ãããåºåäŸïŒå€±ææïŒ:
================================ test session starts ================================ platform linux -- Python 3.x.x, pytest-7.x.x, pluggy-1.x.x rootdir: /path/to/Meta-Template-for-Assignment plugins: ... collected X items tests/stages/stage-01/test_XXX.py::test_function_exists FAILED [XX%] tests/stages/stage-01/test_XXX.py::test_basic_functionality FAILED [XX%] ===================================== FAILURES ====================================== ______________________________ test_function_exists ________________________________ ... ModuleNotFoundError: No module named 'kadai.XXX' ... ================================ X failed in X.XXs =================================Note: ãã®æç¹ã§ãã¹ãã倱æããã®ã¯æ£åžžã§ããåŠçã¯ç©ºã®å®è£ ãã¡ã€ã«ããå§ãããããå¿ èŠãªã¢ãžã¥ãŒã«ãã¯ã©ã¹ããŸã ååšããŸããã
4.1.3 æäœéã®å®è£ ïŒGREENïŒ
src/kadai/é äžã«ãã¹ããŒãž1ãã¯ãªã¢ããããã«å¿ èŠãªæäœéã®å®è£ ãè¡ããŸãã äŸãã°ãsrc/kadai/bank_account.pyãäœæãã以äžã®ãããªå®è£ ãè¡ããŸãïŒclass BankAccount: def __init__(self, initial_balance=0): self.balance = initial_balance def deposit(self, amount): self.balance += amount def get_balance(self): return self.balance4.1.4 ãã¹ãã®æåã確èªïŒGREENïŒ
å床ã¹ããŒãž1ã®ãã¹ããå®è¡ããå šãŠã®ãã¹ããæåããããšã確èªããŸãã
pytest -m stage01 -væåŸ ãããåºåäŸïŒæåæïŒ:
================================ test session starts ================================ platform linux -- Python 3.x.x, pytest-7.x.x, pluggy-1.x.x rootdir: /path/to/Meta-Template-for-Assignment plugins: ... collected X items tests/stages/stage-01/test_XXX.py::test_function_exists PASSED [XX%] tests/stages/stage-01/test_XXX.py::test_basic_functionality PASSED [XX%] ================================ X passed in X.XXs =================================4.1.5 詳现ãªåºåã®ç¢ºèªïŒãªãã·ã§ã³ïŒ
ããè©³çŽ°ãªæ å ±ãå¿ èŠãªå Žåã¯ã以äžã®ãªãã·ã§ã³ã䜿çšããŸãïŒ
# ãã¹ãã®å®è¡ç¶æ³ã詳现ã«è¡šç€º pytest -m stage01 -vv # ãã¹ãçµæã®èŠçŽã衚瀺 pytest -m stage01 -v --tb=short # 倱æãããã¹ãã®ã¿ãåå®è¡ pytest -m stage01 --lf4.2 ã¹ããŒãž2以éã®æ€èšŒ
ã¹ããŒãž2以éãåæ§ã®æé ã§æ€èšŒãè¡ããŸããåã¹ããŒãžã«ã€ããŠä»¥äžã宿œããŠãã ããïŒ
4.2.1 åã¹ããŒãžã®æ€èšŒæé
-
RED確èª: å®è£ åã«ãã¹ããå®è¡ãã倱æã確èª
pytest -m stage02 -v # ã¹ããŒãž2ã®å Žå pytest -m stage03 -v # ã¹ããŒãž3ã®å Žå # 以éåæ§... -
å®è£ :
src/kadai/é äžã«è©²åœã¹ããŒãžã®æ©èœãå®è£ -
GREEN確èª: ãã¹ããå®è¡ããæåã確èª
pytest -m stage02 -v # ã¹ããŒãž2ã®å Žå pytest -m stage03 -v # ã¹ããŒãž3ã®å Žå # 以éåæ§...
4.2.2 环ç©çãªãã¹ã確èª
åã¹ããŒãžå®äºåŸããããŸã§ã®å šãŠã®ã¹ããŒãžã®ãã¹ããéãããšã確èªããŸãïŒ
# ã¹ããŒãž1ãš2ã®ãã¹ããå®è¡ pytest -m "stage01 or stage02" -v # ã¹ããŒãž1ãã3ãŸã§ã®ãã¹ããå®è¡ pytest -m "stage01 or stage02 or stage03" -v # å šãŠã®ã¹ããŒãžã®ãã¹ããå®è¡ pytest -m "stage01 or stage02 or stage03 or stage04 or stage05" -v # ãŸã㯠pytest tests/stages/ -v4.3 ãã¹ã倱ææã®ãããã°ã¬ã€ã
ãã¹ããæåŸ éãã«åäœããªãå Žåã以äžã®ãããã°æé ã宿œããŠãã ããã
4.3.1 ãšã©ãŒã¡ãã»ãŒãžã®ç¢ºèª
# ãã詳现ãªãšã©ãŒæ å ±ã衚瀺 pytest -m stage01 -vv --tb=long # æšæºåºåãå«ããŠè¡šç€º pytest -m stage01 -v -s4.3.2 ãããããšã©ãŒãšå¯ŸåŠæ³
1. ModuleNotFoundError: No module named 'kadai.XXX'
- åå : å¿ èŠãªã¢ãžã¥ãŒã«ãã¡ã€ã«ãååšããªãããŸãã¯ãã¡ã€ã«åãééã£ãŠãã
- å¯ŸåŠæ³:
src/kadai/é äžã«æ£ãããã¡ã€ã«åã§ã¢ãžã¥ãŒã«ãäœæpytest.iniã®pythonpathèšå®ã確èª
2. ImportError: cannot import name 'XXX' from 'kadai.YYY'
- åå : ã¯ã©ã¹ã颿°ãå®çŸ©ãããŠããªãããŸãã¯ååãééã£ãŠãã
- å¯ŸåŠæ³:
- ã¢ãžã¥ãŒã«å ã«å¿ èŠãªã¯ã©ã¹/颿°ãå®çŸ©ãããŠããã確èª
- ã¹ãã«ãã¹ããªãã確èª
3. AssertionError
- åå : ãã¹ãã®æåŸ å€ãšå®éã®æ»ãå€ãäžèŽããŠããªã
- å¯ŸåŠæ³:
- ãã¹ãã³ãŒãå ã®ã³ã¡ã³ããèªã¿ãäœããã¹ãããŠããã確èª
- å®è£ ã仿§éãã確èª
- å¿ èŠã«å¿ããŠãã¹ãã³ãŒããä¿®æ£
4. AttributeError: 'XXX' object has no attribute 'YYY'
- åå : ã¯ã©ã¹ã«å¿ èŠãªã¡ãœããã屿§ãå®çŸ©ãããŠããªã
- å¯ŸåŠæ³:
- ã¯ã©ã¹ã«å¿ èŠãªã¡ãœãã/屿§ã远å
- ã¡ãœããåã®ã¹ãã«ãã¹ã確èª
4.3.3 åå¥ã®ãã¹ã颿°ãå®è¡
ç¹å®ã®ãã¹ã颿°ã®ã¿ãå®è¡ããŠåé¡ãåãåããŸãïŒ
# ç¹å®ã®ãã¹ããã¡ã€ã«ã®ã¿å®è¡ pytest tests/stages/stage-01/test_bank_account.py -v # ç¹å®ã®ãã¹ã颿°ã®ã¿å®è¡ pytest tests/stages/stage-01/test_bank_account.py::test_function_exists -v # ãã¹ãåã®äžéšã§çµã蟌㿠pytest -k "bank_account" -v4.3.4 ãã¹ãã³ãŒãã®åŠ¥åœæ§ç¢ºèª
- ãã¹ãã課é¡ä»æ§ãšäžèŽããŠããã
release/README.mdãšç §ããåãããŠç¢ºèª - ãã¹ãã®æ¥æ¬èªã³ã¡ã³ããåŠçã«ãšã£ãŠçè§£ããããã確èª
- ãšããžã±ãŒã¹ãé©åã«ã«ããŒãããŠããã確èª
4.4 æ€èšŒå®äºã®ç¢ºèª
å šãŠã®ã¹ããŒãžã®æ€èšŒãå®äºããããæçµç¢ºèªãè¡ããŸãïŒ
# å šãŠã®ã¹ããŒãžãã¹ããå®è¡ pytest tests/stages/ -v # ãã¹ãã«ãã¬ããžã確èªïŒãªãã·ã§ã³ïŒ pytest tests/stages/ --cov=src/kadai --cov-report=term-missingæåŸ ãããæçµåºå:
================================ test session starts ================================ collected XX items tests/stages/stage-01/test_XXX.py::test_... PASSED [ X%] tests/stages/stage-02/test_XXX.py::test_... PASSED [ X%] tests/stages/stage-03/test_XXX.py::test_... PASSED [ X%] tests/stages/stage-04/test_XXX.py::test_... PASSED [ X%] tests/stages/stage-05/test_XXX.py::test_... PASSED [ X%] ================================ XX passed in X.XXs ================================Success! å šãŠã®ãã¹ãããã¹ããããæ€èšŒã¯å®äºã§ããæ¬¡ã®ã¹ãããã«é²ã¿ãŸãããã
-
-
ãã¹ãŠã®ã¹ããŒãžã®ãã¹ããæåãããã以äžã®ãã¡ã€ã«ãæŽæ°ããŠãã ããã
src/kadai/: å šã¹ããŒãžãã¯ãªã¢ããããã«å¿ èŠãªå®è£ ãå«ããã¡ã€ã«ãæš¡ç¯è§£çãšããŠagent-output/é äžã«ã³ããŒããŠãã ããã
ãã®åŸãå ã®src/kadai/é äžã®å®è£ æžã¿ãã¡ã€ã«ã¯å šãŠç©ºãã¡ã€ã«ã®ç¶æ ã«æ»ããŠãã ãããpytest.ini: ã¹ããŒãžããšã®ããŒã«ãŒå®çŸ©markersã«ãå®è£ ããå šãŠã®ã¹ããŒãžããŒã«ãŒãèšè¿°ããŠãã ããã.github/workflows/classroom.yml:templates/template.classroom.ymlãããŒã¹ãšããŠãå®è£ ããå šãŠã®ã¹ããŒãžã«å¯Ÿå¿ãããžã§ãã远å ããREADME.mdã®èª²é¡å 容ã«åºã¥ããé ç¹ãèšå®ããŠãã ããã
ãã³ãã¬ãŒããã¡ã€ã«ã«ã¯5ã¹ããŒãžåã®ãžã§ãå®çŸ©ãå«ãŸããŠãããããå¿ èŠã«å¿ããŠã¹ããŒãžæ°ã調æŽããåã¹ããŒãžã®é ç¹ïŒmax-scoreïŒã課é¡å 容ã«åãããŠæŽæ°ããŠãã ããã
-
å ±éã¯ãŒã¯ãã㌠ã«åŸãã倿Žãã³ãããïŒã¡ãã»ãŒãž: "feat: implement and verify tests for $課é¡å"ïŒãããªã¢ãŒããªããžããªã«ããã·ã¥ããŠãã ããã