在对TDD和BDD进行了非常鼓舞人心的培训之后,我尝试使用MSTest
和Specflow
来实施该方法。但我有一个问题,我坚持:
我已经编写了验收测试来验证我们正在处理的子系统。 我们的系统有点分布:
然而我的Specflow Scenario似乎对我自己的开发设置来说太专业了:它包含仅对我有效的输入。在下面的示例中,ip地址主要来自我。目标目录就是我机器上的一个目录。
经过认证的Tester / Validator或产品所有者可能无法启动相同的测试方案,因为他们无法访问此计算机。但我的开发人员也可能不会。
@lastOne
Scenario: Get lattest 3rdParty OCR Data into specified directory
Given I indicate 'database' as the databaseName of third party computer
And I indicate '12.126.42.21' as the ipAddress of the third party computer
And I indicate 'user' as the databaseUser in third party computer
And I indicate 'c:\Temp\test_ocr\' as the destination path where to put the ocr data
And I indicate '2013020800009E' as the truck identifier to be associated with ocr data
When I call the OCR Application program
Then the destination path should contain correctly named xml file, with validated xml data, and jpg files about ocr data.
恐怕我对BDD有一些误解。我的情景太具体了? 如果是的话,我应该在哪里停止?
答案 0 :(得分:3)
我不确定你的问题是否具体是BDD,但它仍然是一个很好的问题。
我通常建议所有开发都是通过每次签入时运行测试的持续集成服务器完成的,即使对于您单独工作的私有项目也是如此。甚至我自己的个人项目也是如此,因为TeamCity是免费的,当我办理登机手续时,家里的儿童桌面处于空闲状态。如果你在团队中工作,那么这一点就更为明显了,因为当你获得它将构建的最新源代码。
但它也可以解决你遇到的问题。当某些内容过于具体时,您可以非常快速地告诉它,因为它不适用于您自己的个人计算机和构建计算机。无论您是在BDD,TDD,ATDD还是任何类型的测试中工作,都存在这些问题。
看看上面的例子,我会说它非常具体而且非常脆弱。如果有一天第三方PC关闭,则所有测试都会失败。如果您使用Specflow运行单元测试,那么我建议您模拟大部分代码,这样您就可以在不调用测试PC的情况下进行测试,但您的示例更像是在尝试进行系统/集成测试。
不是单独指定所有参数,为什么不为整个包提供名称
Given Im using the test pc
然后你可以在绑定中设置其中许多,如果你需要定制它们以便测试仍然通过
[Given]
public void GivenImUsingTheTestPc()
{
if (Environment.ComputerName == "d1234")
{
ipadress = 1.2.3.4;
....
这显然只能改变脆弱性,但至少它会让你继续前进