4

我想创建一个单元测试的负载,以确保我的存储过程正常,但我失败了(我是新来测试视觉工作室)。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失败,因为全局变量未设置。

建议? :。'(

+3

你应该瞄准编写测试不相互依赖。应该首先执行测试所需的任何设置/拆卸。另外,如果实际调用数据库,则这比集合测试更像是集成测试,因为您同时测试数据库和访问代码。 – forsvarir 2011-04-01 14:58:27

回答

1

退房的TestInitializeAttribute你会将此上应该运行前每一个测试来分配相应的资源的方法

一个侧面说明,因为它看起来像你误解了如何将这些应该工作:单元测试不应该需要其他测试产生的伪像如果您正在测试修改,初始化/设置方法应该创建要修改的空间

3

这里的关键词是'单元'。

单元测试应该是自包含的,即由执行测试的代码组成,并且不应该依赖于首先执行的其他测试,或者不影响其他测试的操作。

查看TDD反模式列表,了解编写测试时应避免的事情。 http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/

1

退房Why TestInitialize gets fired for every test in my Visual Studio unit tests?

我认为这将指向你在正确的方向。您可以将其作为TestInitialize运行,而不是将其作为测试运行。

有'有序测试',但它打破了独立运行每个测试的想法。

+0

对于这种特殊类型的测试是不幸的,我需要订购它们。你能指点我的方向吗? – 2011-04-01 17:28:37

+0

@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

0

首先,您所描述的测试听起来不像单元测试,但更像是一个集成测试。单元测试通常是测试代码中的一个功能单元,与系统其余部分隔离,并在内存中运行。集成测试旨在验证系统的组件在组装在一起时能够按预期工作。
然后,无需进入系统的细节,在我看来,我会接近它作为一个单一的测试,调用多种方法 - 沿着线的东西:

[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 
}