从通用测试夹具进行测试;结果不一致

时间:2011-03-22 18:13:22

标签: unit-testing nhibernate sqlite nunit

我有两个有共同父母的测试装置。虽然这些测试涉及SQLite / NHib类型的东西,这些东西通常都是初学者,但是我对NUnit有些了解,我希望能帮助修复这些测试。

好消息是,如果我运行(通过TestDriven.Net)子类化的TestFixtures而不选择公共父级,则所有测试都会成功。但是如果我在运行中包含了共同的父级,我就会失败(可能是因为我的NHib会话已被处理或丢失了它的绑定)。

任何人都可以解释为什么这两个测试可以自己成功但不能成功 父母,如果有某种程度来强制执行成功 行为?

干杯,
Berryl

public class ActivityTestFixture : GreenQueryOnlySQLiteTestFixture 
{ 
    protected IProjectDao _projectDao; 
    protected IDao<Account> _accountDao; 
    protected override void OnFixtureSetUp() 
    { 
        base.OnFixtureSetUp(); 
        _projectDao = DataFactory.GetProjectDao(_sessionFactoryContext.SessionFactory); 
        _accountDao = DataFactory.GetAccountDao(_sessionFactoryContext.SessionFactory); 
    } 
} 

[TestFixture] 
public class AccountDaoTests : ActivityTestFixture 
{ 
    [Test] 
    public void FindAll_IsEquivalentToSeeds() { 
        IList<Account> found; 
        using (var tx = _session.BeginTransaction()) { 
            found = _accountDao.FindAll(); 
            tx.Commit(); 
        } 
        found.AssertUnsavedValueSequenceEqual(ActivitySubjectSeeds.AllAccounts.ToAr ray()); 
    } 
} 

[TestFixture] 
public class ProjectDaoTests : ActivityTestFixture 
{ 
    [Test] 
    public void FindAll_IsEquivalentToSeeds() 
    { 
        IList<Project> found; 
        using (var tx = _session.BeginTransaction()) 
        { 
            found = _projectDao.FindAll(); 
            tx.Commit(); 
        } 
        found.AssertUnsavedValueSequenceEqual(ActivitySubjectSeeds.Projects.ToArray ()); 
    } 
} 

1 个答案:

答案 0 :(得分:0)

不确定您获得的错误是什么,但可能是因为您在GreenQueryOnlySQLiteTestFixture类中有某种静态字段。 NUnit的工作方式是夹具在其内部的测试生命周期中存在。所以它只为所有测试创建一次。这与xUnit不同,后者在一次测试的生命周期中存在。

没有看到整个实现,很难看出出了什么问题。但是,您可以从父夹具中删除TestFixtureAttribute,因为它似乎没有任何测试。