def test_greets(self): with patch('builtins.input', side_effect=['Make']) as prompt: g = Greeter() g.greet() output = get_stdout() self.assertTrue("Hello Make" in output) prompt.assert_called_once_with("Who are you?")
def test_tulosta_tavarat_multiple(self): m = Matkalaukku(10) m.lisaa_tavara(Tavara("Kivi", 1)) m.lisaa_tavara(Tavara("Tiili", 2)) m.tulosta_tavarat() output = get_stdout() self.assertTrue("Kivi (1 kg)" in output, "Kutsuttaessa 'tulosta_tavarat' tulee tulostua kaikki matkalaukun tavarat") self.assertTrue("Tiili (2 kg)" in output, "Kutsuttaessa 'tulosta_tavarat' tulee tulostua kaikki matkalaukun tavarat")
def test_5_pelkka_lopetus(self): values = "0".split(" ") correct = "Lopetetaan..." with patch('builtins.input', side_effect=values): reload_module(self.module) output = get_stdout() self.assertTrue( len(output) > 0, f"Ohjelmasi ei tulosta mitään syötteellä {p(values)}") self.assertTrue( len(output.split("\n")) == 1, "Ohjelmasi tulostaa kyselyjen lisäksi yhden sijasta {} riviä:\n{}\nkun syöte on\n{}" .format(len(output.split("\n")), output, p(values))) self.assertTrue( sanitize(output) == sanitize(correct), "Tulostus \n{} \nei vastaa oikeaa tulostetta \n{} \nkun syöte on\n{}" .format(output, correct, p(values)))
def test_2_positiivinen(self): test_input = randint(33, 105) correct = (test_input - 32) * 5 / 9 with patch('builtins.input', return_value=str(test_input)): reload_module(self.module) output = get_stdout().lower().split("\n") self.assertFalse( output[-1].find("paleltaa") > -1, "Ohjelmasi tulosti viestin 'Paleltaa!' vaikka lämpötila celsiuksina ei ole alle nollan. Varmista että näin ei tapahdu syötteellä {test_input}" ) self.assertEqual(len(output), 1, "Ohjelmasi tulosti useamman kuin yhden rivin") out = output[0] tulos = float(remove_extra_whitespace(out).split(' ')[-2]) self.assertTrue( close(tulos, correct), "Ohjelma ei muuntanut lämpötilaa oikein: lopputulokset syötteellä {} pitäisi olla {}, mutta ohjelmasi tulostaa {}" .format(test_input, correct, output[0]))
def test_2(self): with patch( 'builtins.input', side_effect=[ "1234", "4321", AssertionError("Syötettä pyydetään liian monta kertaa.") ], ) as prompt: reload_module(self.module) output = get_stdout() inpt = '\n'.join(["1234", "4321"]) expected = 'Väärin\nOikein, tarvitsit 2 yritystä' self.assertEqual( sanitize(expected), sanitize(output), f"Syötteellä\n{inpt}\nohjelmasi pitäisi tulostaa:\n{expected}\nohjelmasi tulosti:\n{output}" )
def test_toiminnallisuus_3(self): syote = [ "kesakuun_loppu.txt", "29.6.2020", "4", "30 100 0", "55 40 0", "0 240 25", "180 240 100" ] with patch('builtins.input', side_effect=syote): try: reload_module(self.module) except: self.assertTrue( False, f"Varmista että ohjelmasi toimii syötteellä:\n{f(syote)}") output = get_stdout() tiedosto = syote[0] try: content = get_content(tiedosto) except: self.assertTrue( False, f"Ohjelmasi tulisi kirjoittaa syötteellä:\n{f(syote)}\nraportti tiedostoon {tiedosto}" ) correct = """Ajanjakso: 29.06.2020-02.07.2020 Yht. minuutteja: 1010 Keskim. minuutteja: 252.5 29.06.2020: 30/100/0 30.06.2020: 55/40/0 01.07.2020: 0/240/25 02.07.2020: 180/240/100""" cLines = correct.split('\n') self.assertEqual( len(content), len(cLines), f"Kun ohjelma suoritetaan syötteellä:\n{f(syote)}\ntiedostossa {tiedosto} pitäisi olla nyt {len(cLines)} riviä, niitä on kuitenkin {len(content)}\nTiedoston sisältö on:\n{f(content)}" ) for i in range(0, len(cLines)): r = content[i].strip() c = cLines[i].strip() self.assertEqual( r, c, f"Kun ohjelma suoritetaan syötteellä:\n{f(syote)}\ntiedostossa {tiedosto} rivin numero {i+1} pitäisi olla\n{c}\nSe kuitenkin on:\n{r}\nTiedoston koko sisältö on:\n{f(content)}" )
def test_2_toimii(self): for inpt, good in [ ("This is me", "This is me"), ("We use ptython to make a spell checker", "We use *ptython* to make a spell checker"), ("this is acually a good and usefull program","this is *acually* a good and *usefull* program"), ("Questions we additions is extremely incommode","Questions we additions is extremely incommode"), ("As in merry at forth least ye stood","As in merry at forth least ye stood"), ("And cold sonss yet with","And cold *sonss* yet with"), ("Delivered middletony therefore me at","Delivered *middletony* therefore me at"), ("Attachment companions mann way excellence how her pianoforte","Attachment companions *mann* way excellence how her pianoforte"), ("Frankness applaued by supported ye household","Frankness *applaued* by supported ye household"), ("Collected favourite nowe for for and rapturous replsive consulted","Collected *favourite* *nowe* for for and rapturous *replsive* consulted"), ("An seems green bee wrote again","An seems green bee wrote again"), ("She add what ownn onli like","She add what *ownn* *onli* like"), ("Tolerably we as extremity exquiste do commanded","Tolerably we as extremity *exquiste* do commanded"), ("Doubtful offended do entrance of landloord moreover is mistress in","Doubtful offended do entrance of *landloord* moreover is mistress in"), ("Nay was appear entire ladyes","Nay was appear entire *ladyes*"), ("Sportsman do allowance is setember shameless am sincrity oh recommend","Sportsman do allowance is *setember* shameless am *sincrity* oh recommend"), ("Gate tell man dayz that who","Gate tell man *dayz* that who"), ("Not far stufff she think the jokes","Not far *stufff* she think the jokes"), ("Going as by do knwn noise he wrote round leave","Going as by do *knwn* noise he wrote round leave"), ("Warmly putt branch peope narrow see","Warmly putt branch *peope* narrow see"), ("Winding its waiting yett parlors marryed own feeling","Winding its waiting *yett* parlors *marryed* own feeling"), ("Marry fruit do spite zokes an times","Marry fruit do spite *zokes* an times"), ("Whether at it anknown varrant herself winding if","Whether at it *anknown* *varrant* herself winding if"), ("Him same nne name sake had post love","Him same *nne* name sake had post love"), ("An busy feel form hant am up help","An busy feel form *hant* am up help"), ("Parties it brother amonzst an fortune of","Parties it brother *amonzst* an fortune of"), ("Twenty pehind wicket why age now itself ten","Twenty *pehind* wicket why age now itself ten"), ]: with patch('builtins.input', side_effect = [inpt, AssertionError("Syötettä pyydetään liian monta kertaa.")]): try: reload_module(self.module) output = get_stdout().strip() except: self.assertTrue(False, f"Varmista, että ohjelma pysähtyy syötteellä\n{inpt}") mssage = """\nHuomaa, että tässä tehtävässä mitään koodia EI TULE SIJOITTAA lohkon if __name__ == "__main__": sisälle """ #\n{mssage}") self.assertTrue(len(output)>0, f"Ohjelmasi ei tulosta mitään syötteellä\n{inpt}\n{mssage}") self.assertEqual(good, output, f"Ohjelmasi tulostus:\n{output}\non väärin, odotettiin:\n{good}\nsyöte oli:\n{inpt}")
def test_4_toimii_tiedostoilla_4(self): words = ['opiskelijat4.csv', 'tehtavat4.csv', 'koepisteet4.csv'] with patch('builtins.input', side_effect=w(words) + [AssertionError("Syötettä pyydetään liian monta kertaa.")]): try: reload_module(self.module) output_all = get_stdout() except: self.assertTrue( False, f"Varmista, että ohjelmasi voidaan suorittaa syötteellä\n{f(words)}" ) exp = """nimi teht_lkm teht_pist koe_pist yht_pist arvosana pekka pelokas 25 6 6 12 0 mirja virtanen 30 7 8 15 1 jane doe 33 8 14 22 3 donald frump 35 8 16 24 4 john doe 36 9 20 29 5 kalle paakkola 16 4 9 13 0 eila kaisla 29 7 19 26 4 antti tuuri 18 4 8 12 0 leena lempinen 26 6 10 16 1 eero honkela 21 5 11 16 1""" expRows = exp.split('\n') self.assertTrue( len(output_all) > 0, f"Ohjelmasi ei tulosta mitään syötteellä\n{f(words)}") output = [ line.strip() for line in output_all.split("\n") if len(line) > 0 ] self.assertEqual( len(expRows), len(output), f"Ohjelmasi tulostaa {len(expRows)} rivin sijaan {len(output)} riviä:\n{output_all}\nsyötteellä:\n{f(words)}\nTulostuksen pitäisi sisältää seuraavat rivit:\n{exp}" ) for i in range(len(expRows)): line = output[i] self.assertTrue( line.strip() in exp, f"Ohjelmasi toimii väärin syötteellä\n{f(words)}\nrivi {line} ei ole odotetun kaltainen\nTulostuksen pitäisi sisältää seuraavat rivit:\n{exp}\nOhjelman koko tulostus on:\n{output_all}" )
def test_6_tulosta_tavarat_ruumasta(self): try: from src.koodi import Tavara from src.koodi import Matkalaukku from src.koodi import Lastiruuma ruuma = Lastiruuma(100) koodi = """ ruuma = Lastiruuma(100) laukku = Matkalaukku(25) tavara = Tavara("Aapiskukko", 2) laukku.lisaa_tavara(tavara) ruuma.lisaa_matkalaukku(laukku) ruuma.tulosta_tavarat() """ ruuma = Lastiruuma(100) laukku = Matkalaukku(25) tavara = Tavara("Aapiskukko", 2) laukku.lisaa_tavara(tavara) ruuma.lisaa_matkalaukku(laukku) ruuma.tulosta_tavarat() except Exception as e: self.assertTrue( False, f'Koodin\n{koodi}\nsuoritus aiheutti virheen\n{e}\nOnhan metodi tulosta_tavarat(self) määritelty?' ) out = get_stdout() self.assertTrue( 0 < len(out), f'Kun suoritetaan\n{koodi}\nmetodin pitäsi tulostaa yksi rivi\nNyt ei tulosteta mitään' ) lines = [x for x in out.split('\n') if len(x) > 0] self.assertTrue( 1 == len(lines), f'Kun suoritetaan\n{koodi}\nmetodin pitäsi tulostaa yksi rivi\nTulostus oli\n{out}' ) odotettu = "Aapiskukko (2 kg)" self.assertTrue( out == odotettu, f'Kun suoritetaan\n{koodi}\nmetodin pitäsi tulostaa\n{odotettu}\nTulostus oli\n{out}' )
def test_content(self): reload_module(self.module) out = get_stdout() self.assertTrue(len(out) > 0, 'Koodisi ei tulosta mitään') split_output = sanitize(out).split('\n') self.assertFalse( len(split_output) != 3, 'Tulostuksessa odotettiin olevan {0} riviä, ohjelmasi tulostaa tällä hetkellä {1} riviä.' .format(3, len(split_output))) assert_ignore_ws(self, split_output[0], 'Ukko Nooa, Ukko Nooa oli kunnon mies.', 'Ensimmäisen rivin tulostus väärin. ') assert_ignore_ws(self, split_output[1], 'Kun hän meni saunaan, laittoi laukun naulaan.', 'Toisen rivin tulostus väärin. ') assert_ignore_ws(self, split_output[2], 'Ukko Nooa, Ukko Nooa oli kunnon mies.', 'Kolmannen rivin tulostus väärin. ')
def test_3_vapaat_ruudut(self): test_cases = ((0,0,"X"), (1,1,"O"), (2,2,"X"), (0,1,"X"), (1,0,"O"), (1,2,"X"), (2,1,"O")) for test_case in test_cases: with patch('builtins.input', side_effect=[AssertionError("Syötteen pyytämistä ei odotettu")]): reload_module(self.module) output_alussa = get_stdout() pelaa_siirto = load(exercise, function, 'fi') test_board = get_test_case(test_case[0], test_case[1], "") test_board2 = kopy(test_board) board_after = kopy(test_board) board_after[test_case[1]][test_case[0]] = test_case[2] correct = True test_result = pelaa_siirto(test_board, test_case[0], test_case[1], test_case[2]) self.assertEqual(correct, test_result, f"Tulos {test_result} ei vastaa mallivastausta {correct} kun parametrit ovat \n{test_board2}, {test_case[0]}, {test_case[1]}, {test_case[2]}") self.assertEqual(test_board, board_after, f"Matriisin tila \n{test_board}\nei vastaa mallivastausta \n{board_after}\nkun parametrit ovat \n{test_board2}, {test_case[0]}, {test_case[1]}, {test_case[2]}")
def test_1_toimii_tiedostoilla_1(self): words = ['opiskelijat1.csv', 'tehtavat1.csv', 'koepisteet1.csv'] with patch('builtins.input', side_effect=w(words) + [AssertionError("Syötettä pyydetään liian monta kertaa.")]): try: reload_module(self.module) output_all = get_stdout() except: self.assertTrue( False, f"Varmista, että ohjelmasi voidaan suorittaa syötteellä\n{f(words)}" ) exp = """pekka peloton 0 jaana javanainen 1 liisa virtanen 3""" expRows = exp.split('\n') mssage = """\nHuomaa, että tässä tehtävässä mitään koodia EI TULE SIJOITTAA lohkon if __name__ == "__main__": sisälle """ #\n{mssage}") self.assertTrue( len(output_all) > 0, f"Ohjelmasi ei tulosta mitään syötteellä\n{f(words)}\n{mssage}" ) output = [ line.strip() for line in output_all.split("\n") if len(line) > 0 ] self.assertEqual( len(expRows), len(output), f"Ohjelmasi tulostaa {len(expRows)} rivin sijaan {len(output)} riviä:\n{output_all}\nsyötteellä:\n{f(words)}\nTulostuksen pitäisi sisältää seuraavat rivit:\n{exp}" ) for i in range(len(expRows)): line = output[i] self.assertTrue( line.strip() in exp, f"Ohjelmasi toimii väärin syötteellä\n{f(words)}\nrivi {line} ei ole odotetun kaltainen\nTulostuksen pitäisi sisältää seuraavat rivit:\n{exp}\nOhjelman koko tulostus on:\n{output_all}" )
def test_2_toimii_tiedostoilla_2(self): words = ['opiskelijat2.csv', 'tehtavat2.csv', 'koepisteet2.csv'] with patch('builtins.input', side_effect=w(words) + [AssertionError("Syötettä pyydetään liian monta kertaa.")]): try: reload_module(self.module) output_all = get_stdout() except: self.assertTrue( False, f"Varmista, että ohjelmasi voidaan suorittaa syötteellä\n{f(words)}" ) exp = """nimi teht_lkm teht_pist koe_pist yht_pist arvosana pekka peloton 25 6 11 17 1 jaana javanainen 27 6 10 16 1 liisa virtanen 35 8 6 14 0 donald frump 0 0 15 15 1 john doe 28 7 16 23 3 angela tarkel 32 8 13 21 3 karkki eila 30 7 7 14 0 alan turing 28 7 19 26 4 ada lovelace 27 6 27 33 5""" expRows = exp.split('\n') self.assertTrue( len(output_all) > 0, f"Ohjelmasi ei tulosta mitään syötteellä\n{f(words)}") output = [ line.strip() for line in output_all.split("\n") if len(line) > 0 ] self.assertEqual( len(expRows), len(output), f"Ohjelmasi tulostaa {len(expRows)} rivin sijaan {len(output)} riviä:\n{output_all}\nsyötteellä:\n{f(words)}\nTulostuksen pitäisi sisältää seuraavat rivit:\n{exp}" ) for i in range(len(expRows)): line = output[i] self.assertTrue( line.strip() in exp, f"Ohjelmasi toimii väärin syötteellä\n{f(words)}\nrivi {line} ei ole odotetun kaltainen\nTulostuksen pitäisi sisältää seuraavat rivit:\n{exp}\nOhjelman koko tulostus on:\n{output_all}" )
def test_arvot(self): values = [ "11400 612", "42450 3445", "195000 21500", "567800 77270", "10100200 1689134" ] for valuegroup in values: testvalue, correct = valuegroup.split(" ") with patch('builtins.input', return_value=testvalue): reload_module(self.module) output = get_stdout().split("\n") self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä: {} kun syöte on {}" .format(len(output), output, testvalue)) self.assertTrue( output[0].lower().strip().find("vero: " + correct) > -1, "Tulostus {} ei sisällä oikeaa tulosta {} kun syöte on {}". format(output[0], correct, testvalue))
def test_main(self): orig_argv = sys.argv n = 7 sys.argv[1:] = ["file%i" % i for i in range(n)] with patch('src.file_count.file_count', side_effect=repeat( (0, 0, 0))) as fc: main() self.assertEqual( fc.call_count, n, msg= "Wrong number of calls to function 'file_count' for %i command line parameters!" % n) result = get_stdout().split('\n') for i, line in enumerate(result): self.assertEqual(line.strip(), "0\t0\t0\tfile%i" % i, msg="Wrong result on line %i!" % i) sys.argv = orig_argv
def test_2_nollasta_viiteen(self): values = "0 1 4".split(" ") for value in values: with patch('builtins.input', return_value=value): reload_module(self.module) out = get_stdout() output = out.split("\n") self.assertTrue( len(out) > 0, "Ohjelmasi ei tulosta mitään syötteellä {}".format(value)) self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä syötteellä {}" .format(len(output), value)) self.assertTrue( output[0].find("En usko, että osaat kirjoittaa") > -1, "Tulostuksesta\n{}\nei löydy merkkijonoa 'En usko, että osaat kirjoittaa...' kun syöte on {}" .format(output[0], value))
def test_fizzbuzz(self): values = "15 30 150 330 660".split(" ") correct = "FizzBuzz" for value in values: with patch('builtins.input', return_value=value): reload_module(self.module) out = get_stdout() output = out.split("\n") self.assertTrue( len(out) > 0, "Ohjelmasi ei tulosta mitään syötteellä {}".format(value)) self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä:\n{}\nkun syöte on {}" .format(len(output), p(output), value)) self.assertEqual( output[0].lower().strip(), correct.lower(), "Tulostus \n{}\nei vastaa oikeaa tulostetta \n{}\nkun syöte on {}" .format(output[0], correct, value))
def test_sadalla_ei_400_jaolliset(self): values = "500 700 1100 1300 1900".split(" ") for value in values: with patch('builtins.input', return_value=value): reload_module(self.module) out = get_stdout() output = out.split("\n") self.assertTrue( len(out) > 0, "Ohjelmasi ei tulosta mitään syötteellä {}".format(value)) self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä: {} kun syöte on {}" .format(len(output), output, value)) self.assertTrue( output[0].lower().strip().find("ei ole karkausvuosi") > -1, "Tulostus\n{}\nei vastaa oikeaa tulostetta\n{}\nkun syöte on {}" .format(output[0], "Vuosi ei ole karkausvuosi.", value))
def test_toiminnallisuus_1(self): syote = ["vappu.txt", "1.5.2020", "1", "30 0 5"] with patch('builtins.input', side_effect=syote): try: reload_module(self.module) except: self.assertTrue( False, f"Varmista että ohjelmasi toimii syötteillä:\n{f(syote)}") output = get_stdout() msg = 'Huomaa, että tässä ohjelmassa koodia ei tule kirjoittaa if __name__ == "main" -lohkon sisälle.' tiedosto = syote[0] try: content = get_content(tiedosto) if not content: self.assertTrue(False, msg) except: self.assertTrue( False, f"Ohjelmasi tulisi kirjoittaa syötteellä:\n{f(syote)}\nraportti tiedostoon {tiedosto}" ) correct = """Ajanjakso: 01.05.2020-01.05.2020 Yht. minuutteja: 35 Keskim. minuutteja: 35.0 01.05.2020: 30/0/5""" cLines = correct.split('\n') self.assertEqual( len(content), len(cLines), f"Kun ohjelma suoritetaan syötteellä:\n{f(syote)}\ntiedostossa {tiedosto} pitäisi olla nyt {len(cLines)} riviä, niitä on kuitenkin {len(content)}\nTiedoston sisältö on:\n{f(content)}" ) for i in range(0, len(cLines)): r = content[i].strip() c = cLines[i].strip() self.assertEqual( r, c, f"Kun ohjelma suoritetaan syötteellä:\n{f(syote)}\ntiedostossa {tiedosto} rivin numero {i+1} pitäisi olla\n{c}\nSe kuitenkin on:\n{r}\nTiedoston koko sisältö on:\n{f(content)}" )
def test_2_alaikaiset(self): values = "17 11 8 3".split(" ") for value in values: with patch('builtins.input', return_value=value): reload_module(self.module) out = get_stdout() output = out.split("\n") self.assertTrue( len(out) > 0, "Ohjelmasi ei tulosta mitään syötteellä {}".format(value)) self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä syötteellä {}" .format(len(output), value)) self.assertEqual( output[0].strip(), "Et ole täysi-ikäinen!", f"Syötteellä {value} tulosteen pitäisi olla\nEt ole täysi-ikäinen!\nnyt se on\n" + output[0])
def test_pitkat_sanat(self): words = [ "Tämä on pidempi lause.", "simsalabim, sanoi taikuri", "123456789012345678901234567", "abcdefgacbdefg" ] for word in words: with patch('builtins.input', return_value=word): reload_module(self.module) output_all = get_stdout() output = [ x.strip() for x in output_all.split("\n") if len(x.strip()) > 0 ] correct = get_correct(word) self.assertFalse( len(output_all) == 0, "Ohjelmasi ei tulosta mitään syötteellä " + word) self.assertTrue( len(output) == 3, "Ohjelmasi tulostaa syötteellä {} {} rivin sijasta {} riviä" .format(word, 3, len(output))) self.assertEqual( output[0], "*" * 30, "Tulosteesi eka rivi ei koostu 30 tähdestä: {}".format( output[0])) self.assertEqual( output[2], "*" * 30, "Tulosteesi viimeinen rivi ei koostu 30 tähdestä: {}". format(output[2])) self.assertTrue( len(output[1]) == 30, "Keskimmäisen rivin pituus ei ole 30 vaan {} kun syöte on {}: \n{}" .format(len(output[1]), word, output[1])) correct2 = get_correct2(word) self.assertTrue( outputs_equal(output_all, correct) or outputs_equal(output_all, correct2), "Ohjelmasi tuloste\n{}\nei vastaa oikeaa tulostetta \n{}\nsyötteellä {}" .format(output_all, correct, word))
def test_3_yksi_sana(self): for test_case in [ "aaabb", "aabbbbc", "abcabca", "xyzxyzyyxyz", "mopopojat" ]: with patch('builtins.input', side_effect=[ AssertionError("Syötteen pyytämistä ei odotettu") ]): reload_module(self.module) output_alussa = get_stdout() eniten_kirjainta = load(exercise, function, 'fi') correct = get_correct(test_case) test_result = eniten_kirjainta(test_case) self.assertEqual( correct, test_result, f"Tulos {test_result} ei vastaa odotettua {correct} kutsuttaessa eniten_kirjainta({f(test_case)})" )
def test_tulostus_2(self): test_input = "Keijo,Keksitty,Keksikuja 123 A 1,98765,Keksilä" test_output = "Keijo Keksitty,Keksikuja 123 A 1,98765,Keksilä".split( ",") with patch('builtins.input', side_effect=test_input.split(",")): reload_module(self.module) output = get_stdout().split("\n") self.assertTrue( len(output) == 3, "Ohjelmasi ei tulostanut 3 riviä vaan " + str(len(output))) self.assertTrue( sanitize(output[0]) == sanitize(test_output[0]), f"Ensimmäinen rivi ei tulostunut oikein.\nOdotettiin\n{test_output[0]}\nrivi oli\n{output[0]}\nOhjelman syöte oli\n{test_input}" ) for i in range(1, 3): self.assertEqual( output[i], test_output[i], '{}. rivi ei tulostunut oikein oikein syötteillä {}'. format((i + 1), test_input))
def test_tulostus_3(self): test_input = "Maija Marjukka,Mielikuvitushahmo,Mielikuja 555 as. 234,12121,Tampere" test_output = "Maija Marjukka Mielikuvitushahmo,Mielikuja 555 as. 234,12121,Tampere".split( ",") with patch('builtins.input', side_effect=test_input.split(",")): reload_module(self.module) output = get_stdout().split("\n") self.assertTrue( len(output) == 3, "Ohjelmasi ei tulostanut 3 riviä vaan " + str(len(output))) self.assertTrue( sanitize(output[0]) == sanitize(test_output[0]), f"Ensimmäinen rivi ei tulostunut oikein.\nOdotettiin\n{test_output[0]}\nrivi oli\n{output[0]}\nOhjelman syöte oli\n{test_input}" ) for i in range(1, 3): self.assertEqual( output[i], test_output[i], '{}. rivi ei tulostunut oikein oikein syötteillä {}'. format((i + 1), test_input))
def test_3_lisaatty_loytyy(self): syote = """2 maija 040-234567 1 maija 3""" words = s(syote) with patch('builtins.input', side_effect=s(syote) + [AssertionError("Syötettä pyydetään liian monta kertaa.")]): try: reload_module(self.module) output_all = get_stdout() except: self.assertTrue( False, f"Varmista, että ohjelma pysähtyy syötteellä\n{f(words)}") exp = """ok! 040-234567 lopetetaan...""" expWordrs = exp.split('\n') self.assertTrue( len(output_all) > 0, f"Ohjelmasi ei tulosta mitään syötteellä\n{f(words)}") output = [ line.strip() for line in output_all.split("\n") if len(line) > 0 ] self.assertEqual( len(expWordrs), len(output), f"Ohjelmasi tulostaa {len(expWordrs)} rivin sijaan {len(output)} riviä:\n{output_all}\nsyötteellä:\n{f(words)}\nTulostuksen pitäisi olla\n{exp}" ) for i in range(len(expWordrs)): e = expWordrs[i] line = output[i] self.assertEqual( line, e, f"Ohjelmasi toimii väärin syötteellä\n{f(words)}\nsen tulostama rivi numero {i+1} on väärä, sen pitäisi olla\n{e}\nrivi on\n{line}\nOhjelman koko tulostus on:\n{output_all}\nTulostuksen pitäisi olla\n{exp}" )
def test_10_koodarit_tilastot2(self): syote = [ "1", "koodaa uusi facebook", "joona 10", "1", "koodaa uusi twitter", "joona 95", "4", "1", "6", "joona", "0" ] with patch('builtins.input', side_effect=syote): try: reload_module(self.module) except: self.fail( f"varmista että ohjelma toimii syötteellä\n{s(syote)}") output = get_stdout() odotettu = "työt: valmiina 1 ei valmiina 1, tunteja: tehty 10 tekemättä 95" self.assertTrue( odotettu in output, f"Ohjelmasi tulostuksessa pitäisi olla\n{odotettu}\nsyötteellä\n{s(syote)}\nTulostus oli\n{output}" )
def test_3_alle_nolla(self): values = "-1 -5 -11 -902".split(" ") for value in values: with patch('builtins.input', return_value=value): reload_module(self.module) out = get_stdout() output = out.split("\n") self.assertTrue( len(out) > 0, "Ohjelmasi ei tulosta mitään syötteellä {}".format(value)) self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä syötteellä {}" .format(len(output), value)) self.assertTrue( output[0].find("Taitaa olla virhe") > -1, "Tulostuksesta\n{}\nei löydy merkkijonoa 'Taitaa olla virhe' kun syöte on {}" .format(output[0], value))
def test_yli_100_satunnainen(self): pisteet = randint(101, 1000) oikeat_pisteet = 1.15 * pisteet with patch('builtins.input', return_value=str(pisteet)): reload_module(self.module) output = get_stdout() output_list = output.split("\n") self.assertTrue( len(output_list) == 2, "Ohjelmasi tulostaa syötteellä {} kahden rivin sijasta {} riviä" .format(pisteet, len(output_list))) self.assertTrue( output_list[0].find("Sait 15") > -1, "Tulosteesta ei löydy riviä 'Sait 15 % bonusta', tulosteesi on " + output) self.assertFalse( output_list[0].find("10 % bonusta") > -1, "Tulosteesta löytyy väärä bonusluku, 10 %:', tulosteesi on " + output) self.check(output, pisteet, oikeat_pisteet)
def test_tulostus_1(self): test_input = "Pekka,Python,Pythonpolku 1,12345 Pythonila" test_output = "Pekka Python,Pythonpolku 1,12345 Pythonila".split(",") with patch('builtins.input', side_effect=test_input.split(",")): reload_module(self.module) out = get_stdout() self.assertTrue(len(out) > 0, "Ohjelmasi ei tulosta mitään") output = out.split("\n") self.assertTrue( len(output) == 3, "Ohjelmasi ei tulostanut 3 riviä vaan " + str(len(output))) self.assertTrue( sanitize(output[0]) == sanitize(test_output[0]), f"Ensimmäinen rivi ei tulostunut oikein.\nOdotettiin\n{test_output[0]}\nrivi oli\n{output[0]}\nOhjelman syöte oli\n{test_input}" ) for i in range(1, 3): self.assertEqual( output[i], test_output[i], '{}. rivi ei tulostunut oikein oikein syötteillä {}'. format((i + 1), test_input))
def test_2_toimii_ositteen_lisays(self): syote = ["3", "Erkki", "Linnankatu 10", "2", "Erkki", "0"] with patch('builtins.input', side_effect=syote): try: reload_module(self.module) except: self.fail( f"varmista että ohjelma toimii syötteellä\n{s(syote)}") output = get_stdout() odotettu = "numero ei tiedossa" self.assertTrue( odotettu in output, f"Ohjelmasi tulostuksessa pitäisi olla\n{odotettu}\nsyötteellä\n{s(syote)}\nTulostus oli\n{output}" ) odotettu = "Linnankatu 10" self.assertTrue( odotettu in output, f"Ohjelmasi tulostuksessa pitäisi olla\n{odotettu}\nsyötteellä\n{s(syote)}\nTulostus oli\n{output}" )
def test_5_ei_lukuja(self): with patch('builtins.input', side_effect=["yks", "kaks", "kolme", "100"]): lue = load(exercise, function, 'fi') try: tulos = lue("anna luku:", 95, 105) except: self.assertTrue( False, "varmista että ohjelmasti suoritus onnistuu kun syöte on\nyks\nkaks\nkolme\n100" ) output = get_stdout() self.assertTrue( "Syötteen on oltava kokonaisluku" in output, "Funktion tulee tulostaa virheviesti 'Syötteen on oltava kokonaisluku väliltä 95...105', kun sitä kutsutaan parametreilla ('Anna luku', 95, 10) ja syöte koostuu kirjaimista." ) self.assertEqual( tulos, 100, "Funktio tulisi palauttaa arvo 100, kun käyttäjä antaa syötteen 100 ja sitä kutsutaan parametreilla ('Anna luku', 95, 10)" )
def test_aku(self): values = "Tupu Hupu Lupu".split(" ") for value in values: with patch('builtins.input', return_value=value): reload_module(self.module) # Poista otsikot output = get_stdout().split("\n") self.assertTrue( len(output) == 1, "Ohjelmasi tulostaa yhden rivin sijasta {} riviä: {} kun syöte on {}" .format(len(output), output, value)) self.assertTrue( output[0].find("Aku Ankan veljenpoika") > -1, "Tulostuksesta {} ei löydy mainintaa 'Aku Ankan veljenpoika' kun syöte on {}" .format(output[0], value)) self.assertFalse( output[0].find("Mikki Hiiren veljenpoika") > -1, "Tulostuksesta {} löytyy maininta 'Mikki Hiiren veljenpoika' kun syöte on {}" .format(output[0], value))
def test_tulosta_tavarat_multiple(self): m = Matkalaukku(10) m.lisaa_tavara(Tavara("Kivi", 1)) m.lisaa_tavara(Tavara("Tiili", 2)) m2 = Matkalaukku(10) m2.lisaa_tavara(Tavara("Vaatteet", 3)) l = Lastiruuma(10) l.lisaa_matkalaukku(m) l.lisaa_matkalaukku(m2) l.tulosta_tavarat() output = get_stdout() self.assertTrue( "Kivi (1 kg)" in output, "Kutsuttaessa 'tulosta_tavarat' tulee tulostua kaikkien " + "lastiruuman matkalaukujen kaikki tavarat", ) self.assertTrue( "Tiili (2 kg)" in output, "Kutsuttaessa 'tulosta_tavarat' tulee tulostua kaikkien " + "lastiruuman matkalaukujen kaikki tavarat", ) self.assertTrue( "Vaatteet (3 kg)" in output, "Kutsuttaessa 'tulosta_tavarat' tulee tulostua kaikkien " + "lastiruuman matkalaukujen kaikki tavarat", )
def test_tulosta_tavarat_empty(self): Lastiruuma(1).tulosta_tavarat() self.assertEqual( 0, len(get_stdout()), "Kutsuttaessa 'tulosta_tavarat' tyhjälle matkalaukulle, ei tule tulostua mitään" )