【发布时间】:2013-02-05 13:17:51
【问题描述】:
我一直在研究基于验收的测试,它们看起来很不错,因为它们更自然地适合基于特性的开发。
问题是我不知道如何在代码中布置它们。我想尽量避免引入另一个框架来处理这个问题,所以我只是在寻找一种简单的方法来启动和运行这些测试。
我对代码结构所需的任何更改持开放态度。我还使用规范来建立复杂的验收标准。
我正在尝试做的示例:
public class When_a_get_request_is_created
{
private readonly IHttpRequest _request;
public When_a_get_request_is_created()
{
_request = new HttpRequest();
}
// How to call this?
public void Given_the_method_assigned_is_get()
{
_request = _request.AsGet();
}
// What about this?
public void Given_the_method_assigned_is_not_get()
{
_request = _request.AsPost();
}
// It would be great to test different assumptions.
public void Assuming_default_headers_have_been_added()
{
_request = _request.WithDefaultHeaders();
}
[Fact]
public void It_Should_Satisfy_RequestIsGetSpec()
{
Assert.True(new RequestUsesGetMethodSpec().IsSatisfiedBy(_request));
}
}
我在这里可能完全不合时宜,但基本上我希望能够在不同的假设和假设下运行测试。我不介意是否必须进行更多课程或少量重复,只要我可以将某人指向测试以验证给定标准。
【问题讨论】:
-
这看起来更像是功能测试而不是验收测试(因为您正在模拟其他代码对您的代码的使用,而不是人类对您的程序的使用)。它是否正确?请参阅this question 以获得对每个的良好比较。如果是这样,您可以使用多种方法,包括aspect-oriented 方法。但是,在验收测试方面,我不是专家,也不想因错误回答您的问题而搅浑水。
-
老实说我不确定。这个想法是,开发人员给了我一个 http 客户端的故事,基于这个故事,我需要根据我们对期望的讨论来满足一些标准。这样做的最终结果是他得到了他想要的,而我对期望进行了编码。我们正在努力寻找一种方法,只开发和测试需要的东西,不多不少。
-
PS 你的链接都指向同一篇文章。
-
这绝对是基于
Gherkin的验收测试框架的候选者,例如SpecFlow。我知道您说过您不想添加框架,但这正是它们的设计目的 -
我担心会增加另一个级别的复杂性并获得批准。如果没有框架就无法完成,老实说,我会质疑该模式的有效性。不幸的是,我必须在雇主提供的范围内工作,并为尚未得到证实(在我们这边)的测试方式添加更多依赖项,这种情况不会发生。这可能是未来的一个选择,所以我也会看看 specflow。
标签: c# testing acceptance-testing