我相信大多数人都在编写大量的自动化测试,而且在进行单元测试时你也遇到了一些常见的陷阱.
我的问题是你是否遵循任何编写测试的行为规则以避免将来出现问题?更具体一点:良好单元测试的属性是什么,或者您如何编写测试?
鼓励语言不可知的建议.
language-agnostic tdd integration-testing unit-testing testing-strategies
我不明白如何在以下代码中遵守TDD FIRST原则.
以下是关于FIRST原则的说明:
- 快速:快速运行(子集)测试(因为您将一直运行它们)
- 独立:没有测试依赖于其他测试,因此可以按任何顺序运行任何子集
- 可重复:运行N次,得到相同的结果(以帮助隔离错误并启用自动化)
- 自检:测试可以自动检测是否通过(没有人工检查输出)
- 及时:与被测代码同时写入(使用TDD,先写!)
测验问题:
莎莉希望她的网站在每个月的第一个星期二有特别的布局.她有以下控制器和测试代码:
Run Code Online (Sandbox Code Playgroud)# HomeController def index if Time.now.tuesday? render 'special_index' else render 'index' end end # HomeControllerSpec it "should render special template on Tuesdays" do get 'index' if Time.now.tuesday? response.should render_template('special_index') else response.should render_template('index') end end没有遵循什么第一原则?
- 快速
- 独立
- 重复
- 自检
- 及时
我不确定哪个FIRST原则没有被遵守:
'special_index'如果它是星期二,'index'如果它不是星期二.我在测验中选择了Timely,因为测试代码是在控制器代码之后呈现的.但我提出的问题是错误的,回想起来,这不是一个好的选择.我不确定这里没有遵循哪个FIRST原则.
我正在使用Selenium WebDriver运行测试,如果用户没有访问权限,则页面上不存在div.我正在尝试等待,以便如果显示该项目,则返回true,但如果它达到超时,则返回false.
public bool SummaryDisplayed()
{
var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(5));
var myElement = wait.Until(x => x.FindElement(By.Id("summaryPage")));
return myElement.Displayed;
}
Run Code Online (Sandbox Code Playgroud)
我不想使用Thread.Sleep,因为如果2秒后元素存在,我希望它继续.但是如果5秒后元素不存在则返回false.我不希望它抛出异常,在某些测试用例中我预计它不存在.有没有办法可以抑制异常并在超时后返回false?谢谢