有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
这个代码我找了很久居然没有找得到,简直难以理解,就花了一点时间用python写了出来,原理的话很多博客都有写,我就不再讲了,我可以分享几个我认为讲的不错的博主的文章。
实验一 黑盒测试 - Arisf - 博客园 (cnblogs.com)
(6条消息) 黑盒测试——自动饮料售货机_饮料自动售货机因果图_Starzkg的博客-CSDN博客w
我这里实现的是较为简单的橙汁啤酒的那个贩卖机,因为有些急,UI写的并不是很好看,同时还有一个小bug没有解决,如果有大佬解决感激不尽!
bug:在点击重重按钮后,thinker库中的radiobutton的选中效果的视觉效果无法消除(虽然其他的参数都可以成功重置)
代码如下所示:
import tkinter as tk class black_test(): def __init__(self, my_window, window_name): self.my_window = my_window self.window_name = window_name self.button_money = None self.button_drink = None self.button_ensure = None self.button_restart = None self.drink = 0 self.check = 0 self.money_choose = None self.drink_choose = None self.money_value = 0 self.drink_value = 0 self.label_out = None self.text_out_var = None self.text_out = None self.text_check_var = None self.label_check = None self.text_check = None self.tips_var = None self.tips = None # 设置窗口 def set_init_windows(self): self.my_window.title(self.window_name) # 窗口大小 self.my_window.geometry('640x480+540+120') # button 一元 self.money_choose = tk.IntVar() # 作用窗口, 按钮名,宽度, 单选参数,同为money_choose一组 self.button_money = tk.Radiobutton(self.my_window, text="一元", width=10, variable=self.money_choose, value=1, command=self.set_money) # 设置位置 self.button_money.grid(row=1, column=10) self.button_money = tk.Radiobutton(self.my_window, text="五角", width=10 , variable=self.money_choose,value=2, command=self.set_money) self.button_money.grid(row=1, column=100) self.drink_choose = tk.IntVar() self.button_drink = tk.Radiobutton(self.my_window, text="啤酒", width=10, variable=self.drink_choose, value=1, command=self.set_drink) self.button_drink.grid(row=2, column=10) self.button_drink = tk.Radiobutton(self.my_window, text="橙汁", width=10, variable=self.drink_choose, value=2, command=self.set_drink) self.button_drink.grid(row=2, column=100) self.button_ensure = tk.Button(self.my_window, text="确定", width=10, command=self.Ensure) self.button_ensure.grid(row=3, column=10) self.button_restart = tk.Button(self.my_window, text="复位", width=10, command=self.Restart) self.button_restart.grid(row=3, column=100) # 通过置为StringVar来动态修改label中的字符文本 self.text_out_var = tk.StringVar() self.label_out = tk.Label(self.my_window, text="请取饮料") self.label_out.grid(row=4, column=10) self.text_out = tk.Label(self.my_window, width=20, height=5, background='white', textvariable=self.text_out_var) self.text_out.grid(row=4, column=20) self.text_check_var = tk.StringVar() self.label_check = tk.Label(self.my_window, text="找零") self.label_check.grid(row=4,column=30) self.text_check = tk.Label(self.my_window, width=20, height=5, background='white', textvariable=self.text_check_var) self.text_check.grid(row=4, column=100) self.tips_var = tk.StringVar() self.tips = tk.Label(self.my_window, width=20, textvariable=self.tips_var) self.tips.grid(row=5,column=10) # 功能函数set_money def set_money(self): # 1-1元 2-0.5元 self.tips_var.set(" ") if self.money_choose.get() == 1: self.money_value = 1 if self.money_choose.get() == 2: self.money_value = 2 # 功能函数set_drink def set_drink(self): # 1-啤酒 2-橙汁 self.tips_var.set(" ") if self.drink_choose.get() == 1: self.drink_value = 1 if self.drink_choose.get() == 2: self.drink_value = 2 # 功能函数Ensure def Ensure(self): # 做好了选择才能确认 if self.money_value != 0 and self.drink_value != 0: self.tips_var.set(" ") if self.drink_value == 1 and self.money_value == 1: self.text_out_var.set("请取走你的啤酒") self.text_check_var.set("找零0.5元") elif self.drink_value == 1 and self.money_value == 2: self.text_out_var.set("请取走你的啤酒") self.text_check_var.set("无需找零") elif self.drink_value == 2 and self.money_value == 1: self.text_out_var.set("请取走你的橙汁") self.text_check_var.set("找零0.5元") elif self.drink_value == 2 and self.money_value == 2: self.text_out_var.set("请取走你的橙汁") self.text_check_var.set("无需找零") else: self.tips_var.set("请完成选择再进行确认") # 功能函数set_drink def Restart(self): self.money_value = 0 self.drink_value = 0 self.tips_var.set(" ") self.text_out_var.set(" ") self.text_check_var.set(" ") if __name__ == '__main__': # 实例化出一个父窗口 window = tk.Tk() black_test_window = black_test(window, "给你好果汁吃") # 设置根窗口默认属性 black_test_window.set_init_windows() window.mainloop()