Visual Studio中的单元测试
我想创建一个单元测试的负载,以确保我的存储过程正常,但我失败了(我是新来测试视觉工作室)。Visual Studio中的单元测试
基本上我要做到以下几点:
<testclass()>
Dim myglobalvariable as integer
<testmethod()>
Public sub test()
-> use stored procedure to insert a record
set myglobalvariable = result from the sp
end sub
public sub test2()
-> use a stored procedure to modify the record we just added
end sub
public sub test3()
-> use a stored procedure to delete the record we just added
end sub
end class
的问题是,因为测试没有按顺序运行,测试2和3失败,因为全局变量未设置。
建议? :。'(
退房的TestInitializeAttribute你会将此上应该运行前每一个测试来分配相应的资源的方法
一个侧面说明,因为它看起来像你误解了如何将这些应该工作:单元测试不应该需要其他测试产生的伪像如果您正在测试修改,初始化/设置方法应该创建要修改的空间
这里的关键词是'单元'。
单元测试应该是自包含的,即由执行测试的代码组成,并且不应该依赖于首先执行的其他测试,或者不影响其他测试的操作。
查看TDD反模式列表,了解编写测试时应避免的事情。 http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/
退房Why TestInitialize gets fired for every test in my Visual Studio unit tests?
我认为这将指向你在正确的方向。您可以将其作为TestInitialize
运行,而不是将其作为测试运行。
有'有序测试',但它打破了独立运行每个测试的想法。
对于这种特殊类型的测试是不幸的,我需要订购它们。你能指点我的方向吗? – 2011-04-01 17:28:37
@Karl Stoney:查看http://msdn.microsoft.com/en-us/library/ms182631.aspx和http://www.codeproject.com/KB/testing/UnitTestVS2008.aspx那些涵盖“有序测试”我没有使用过它们,但名字听起来像你要找的东西。 :) – Nija 2011-04-01 17:48:36
首先,您所描述的测试听起来不像单元测试,但更像是一个集成测试。单元测试通常是测试代码中的一个功能单元,与系统其余部分隔离,并在内存中运行。集成测试旨在验证系统的组件在组装在一起时能够按预期工作。
然后,无需进入系统的细节,在我看来,我会接近它作为一个单一的测试,调用多种方法 - 沿着线的东西:
[Test]
public void Verify_CreateUpdateDelete()
{
CreateEntity();
Assert that the entity exists
UpdateEntity();
Assert that the entity has been updated
DeleteEntity();
Assert that the entity has been deleted
}
你应该瞄准编写测试不相互依赖。应该首先执行测试所需的任何设置/拆卸。另外,如果实际调用数据库,则这比集合测试更像是集成测试,因为您同时测试数据库和访问代码。 – forsvarir 2011-04-01 14:58:27