Fakultas Ilmu Komputer UI

Commit da039b44 authored by Rani Lasma Uli's avatar Rani Lasma Uli
Browse files

update README for exercise 6

parent 660dabaa
Pipeline #24109 passed with stages
in 9 minutes and 58 seconds
......@@ -7,6 +7,7 @@
- [Cerita Exercise 4](#cerita-exercise-4)
- [Refactoring and Clean Code](#refactoring-and-clean-code)
- [Why Need Test Organization](#why-need-test-organization)
- [Mutation Testing](#mutation-testing)
- [URL](#url)
- [Install Modules](#install-modules)
......@@ -136,4 +137,63 @@ dan memindahkan semua styling ke dalam file tersebut.
### Why Need Test Organization
Test Organization menjadi penting saat test yang dibuat akan banyak. Jika semua test ditaruh dalam 1 file, debugging akan sulit. File test menjadi sangat panjang dan readability-nya berkurang. Untuk menghindari kondisi semacam ini, kita perlu mengorganisir sejumlah test ke dalam file (class) terpisah untuk memastikan helper method pada test menjadi reusable, menghindari redundant code, dan meningkatkan readability code. Readability code sangatlah penting untuk perkembangan aplikasi yang lebih besar, seperti penambahan fitur atau perubahan requirement yang biasa terjadi pada penerapan Agile Methodology. Jadi, kesadaran untuk menjaga readability code harus disadari sedari awal pengembangan.
\ No newline at end of file
Test Organization menjadi penting saat test yang dibuat akan banyak. Jika semua test ditaruh dalam 1 file, debugging akan sulit. File test menjadi sangat panjang dan readability-nya berkurang. Untuk menghindari kondisi semacam ini, kita perlu mengorganisir sejumlah test ke dalam file (class) terpisah untuk memastikan helper method pada test menjadi reusable, menghindari redundant code, dan meningkatkan readability code. Readability code sangatlah penting untuk perkembangan aplikasi yang lebih besar, seperti penambahan fitur atau perubahan requirement yang biasa terjadi pada penerapan Agile Methodology. Jadi, kesadaran untuk menjaga readability code harus disadari sedari awal pengembangan.
### Mutation Testing
Berikut adalah kode yang akan di-test berikut dengan 2 mutant yang valid.
```python
def index(request):
if request.method == 'POST' and request.POST['item_text'] != '':
Item.objects.create(text=request.POST['item_text'])
return redirect('/')
items = Item.objects.all()
message = "oh tidak"
# Mutant 1: items.count() != 0
if items.count() == 0:
message = "yey, waktunya berlibur"
# Mutant 2: items.count() <= 5
elif items.count() < 5:
message = "sibuk tapi santai"
return render(request, 'to-do-list.html', {
'items': items,
'comment':message,
})
```
Untuk membunuh Mutant 1 dengan kategori `Strongly Kill` jumlah item harus memenuhi lebih dari 5. Mutant 1 akan mengeluarkan output `yey, waktunya libur`, sedangkan method index() yang sesungguhnya akan mengeluarkan output `oh tidak`. Berikut implementasinya.
```python
def test_to_kill_Index_mutant1(self):
Item.objects.all().delete()
# 6 items
for x in range(0,6):
Item.objects.create(text='itemey '+str(x))
response = self.client.get(TO_DO_LIST_URL)
html = response.content.decode('utf8')
self.assertTrue("oh tidak" in html)
```
Lalu untuk membunuh Mutant 2, dibutuhkan jumlah item tepat 5, sehingga Mutant 2 akan mengeluarkan output `sibuk tapi santai`, sedangkan method index() yang sebenarnya akan mengeluarkan output `oh tidak`. Berikut adalah implemetasinya.
```python
def test_to_kill_Index_mutant2(self):
Item.objects.all().delete()
# 5 items
for x in range(0,5):
Item.objects.create(text='itemey '+str(x))
response = self.client.get(TO_DO_LIST_URL)
html = response.content.decode('utf8')
self.assertTrue("oh tidak" in html)
```
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment