Rhino Mocks / Тестване на хранилище - пакетът от тестове на NUnit се проваля, но тестът на единичен макет на единица преминава?

Според предишния ми въпрос: Rhino Mocks - Слоят на тестовото хранилище връща препратката към обект, която не е зададена на грешка на екземпляр

Имам проблем при преминаване на теста NUnit, когато се изпълнява заедно с другите тестове в пакета.

Целият тестов клас е както следва:

using System;
using System.Linq;
using System.Linq.Expressions;
using NUnit.Framework;
using System.Collections.Generic;
using Rhino.Mocks;
using Assert = NUnit.Framework.Assert;
Tests.DAO
{
    /// <summary>
    /// Uses the 3A method of Unit Testing; Arrange, Act, Assert.
    /// 
    /// Tests the Billing DAO
    /// </summary>
    [TestFixture]
    public class BillingTests
    {
        private IDataContextWrapper _dataContext;
        private Repository _intRepository;

        /// <summary>
        /// Sets up the following constructs for testing.
        /// 
        /// - DataContext
        /// - InternalRepository
        /// - Billing
        /// </summary>
        [TestFixtureSetUp]
        public void TestFixtureSetup()
        {
            _dataContext = MockRepository.GenerateMock<IDataContextWrapper>();
        }

        /// <summary>
        /// 
        /// </summary>
        [TestFixtureTearDown]
        public void TestFixtureTearDown()
        {
            _dataContext.Dispose();
        }

        /// <summary>
        /// Tests adding a Billing object to the Database.
        /// </summary>
        [Test]
        public void Add()
        {
            // Arrange
            var billing = new Billing();
            _intRepository = new Repository(_dataContext);

            // Act
            _intRepository.AddRecord(billing);

            // Assert
            _dataContext.AssertWasCalled(x => x.InsertOnSubmit(billing));
            _dataContext.AssertWasCalled(x => x.SubmitChanges());
        }

        /// <summary>
        /// The test attempts to remove the Billing before asserting that it no-longer
        /// exists in the database by attempting to delete it again.
        /// </summary>
        [Test]
        public void Delete()
        {
            // Arrange
            var billing = new Billing();
            _intRepository = new Repository(_dataContext);

            // Arrange
            _intRepository.DeleteRecord(billing);

            // Assert
            _dataContext.AssertWasCalled(x => x.DeleteOnSubmit(billing));
            _dataContext.AssertWasCalled(x => x.SubmitChanges());
        }

        /// <summary>
        /// The test retrieves the Billing from 
        /// the database and asserts that 
        /// the original Billing and
        /// the one retrieved are the same.
        /// </summary>
        [Test]
        public void GetRecordWhere()
        {
            // Arrange
            var list = new List<Billing> {new Billing {BillingId = 1}};
            const int testId = 1;

            _dataContext.Stub(x => x.GetTable<Billing>()).Return(list.AsQueryable());
            _intRepository = new Repository(_dataContext);

            // Act
            var result = _intRepository.GetRecordWhere<Billing>(x => x.BillingId == testId);

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.BillingId, testId);
            _dataContext.AssertWasCalled(x => x.GetTable<Billing>());
        }

        /// <summary>
        /// 
        /// </summary>
        [Test]
        public void GetAllRecordsWhere()
        {

        }

        /// <summary>
        /// Retrieves the total number of Billings in the database
        /// and compares it against how many were added by the testFixture.
        /// </summary>
        [Test]
        public void GetAllBillings()
        {
            // Arrange
            _dataContext.Stub(x => x.GetTable<Billing>()).Return(new List<Billing> { new Billing { BillingId = 1 } }.AsQueryable());
            _intRepository = new Repository(_dataContext);

            // Act
            var result = _intRepository.GetAllRecords<Billing>();

            // Assert
            Assert.AreEqual(typeof(EnumerableQuery<Billing>), result.GetType());
            _dataContext.AssertWasCalled(x => x.GetTable<Billing>());
        }

        /// <summary>
        /// Tests find all Billings. Expects the return type to be of IQeryable
        ///  </summary>
        [Test]
        public void FindAllBillings()
        {
            // Arrange
            _dataContext.Stub(x => x.GetTable<Billing>()).Return(new List<Billing>().AsQueryable());
            _intRepository = new Repository(_dataContext);

            // Act
            var result = _intRepository.FindAll<Billing>();

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(typeof(EnumerableQuery<Billing>), result.GetType());
        }
    }
}

Тестът, който вече е коригиран (или по-скоро моето разбиране е коригиран), преминава, когато се изпълнява сам. Но не и когато тестовете се провеждат заедно? Пропускам ли нещо във функциите SetUp / TearDown на NUnit? Дали dataContext или Repository се запазват там, където не искам да бъдат?

Благодаря за всяка помощ!


person M05Pr1mty    schedule 15.11.2011    source източник


Отговори (1)


TestFixtureSetup и TestFixtureTearDown се изпълняват веднъж на мач. Това означава, че може да има само един метод, означен с TestFixtureSetup и той се изпълнява точно веднъж и преди да се изпълнят всички тестове в приспособлението. По същия начин може да има само един метод, означен с TestFixtureTearDown и този метод се изпълнява точно веднъж и след като се изпълняват всички тестове в приспособлението. Следователно вашата променлива _dataContext се инициализира веднъж в метода TestFixtureSetup и не се изхвърля до TestFixtureTearDown. Наистина е трудно да се каже дали това е, което възнамерявате или не.

Ако искате методи за настройка и премахване, които се изпълняват преди и след всеки тест поотделно, използвайте атрибутите Setup и TearDown.

person jason    schedule 15.11.2011
comment
да! Благодаря за бързия отговор. Това беше правописна грешка от моя страна. честно :) - person M05Pr1mty; 15.11.2011