многократное использование наборов тестов с несколькими реализациями?

Вы не можете. Решение CMS будет работать на gVim, но не в энергии, потому что терминалы не могут различать < Space> и < S-Space> потому что проклятия видят их то же. Могло бы быть возможно в будущем, если энергия получает поддержку libtermkey, и Ваш терминал поддерживает надлежащий < CSI> последовательности (xterm делает, если правильно настроено; ничто иное еще не делает).

5
задан Chris 29 September 2009 в 23:46
поделиться

2 ответа

Создайте базовый тестовый класс, который содержит тесты, общие для реализаций IFoo, например:

// note the absence of the TestFixture attribute
public abstract class TestIFooBase
{
   protected IFoo Foo { get; set; }

   [SetUp]
   public abstract void SetUp();

   // all shared tests below    

   [Test]
   public void ItWorks()
   {
      Assert.IsTrue(Foo.ItWorks());
   }
}

Теперь создайте очень маленький производный класс для каждой реализации, которую вы хотите протестировать:

[TestFixture]
public class TestBarAsIFoo : TestIFooBase
{
   public override void SetUp()
   {
      this.Foo = new Bar();
   }
}

изменить : Очевидно, NUnit также поддерживает параметризованные тестовые инструменты , поддерживаются даже общие тестовые инструменты с типами параметров. Пример из связанной документации:

[TestFixture(typeof(ArrayList))]
[TestFixture(typeof(List<int>))]
public class IList_Tests<TList> where TList : IList, new()
{
  private IList list;

  [SetUp]
  public void CreateList()
  {
    this.list = new TList();
  }

  [Test]
  public void CanAddToList()
  {
    list.Add(1); list.Add(2); list.Add(3);
    Assert.AreEqual(3, list.Count);
  }
}

Этот пример немного упрощен, потому что он имеет ограничение new () для типов. Но вы также можете использовать Activator.CreateInstance и передать аргументы конструктора для своих IFoo реализаций из атрибутов TestFixture .

12
ответ дан 18 December 2019 в 14:48
поделиться

Один из нескольких способов сделать это:

public interface IFoo
{
    string GetName();
}

public class Foo : IFoo
{
    public string GetName()
    {
        return "Foo";
    }
}

public class Bar : IFoo
{
    public string GetName()
    {
        return "Bar";  // will fail
    }
}

public abstract class TestBase
{
    protected abstract IFoo GetFoo();

    [Test]
    public void GetName_Returns_Foo()
    {
        IFoo foo = GetFoo();
        Assert.That(foo.GetName(), Is.EqualTo("Foo"));
    }
}

[TestFixture]
public class FooTests : TestBase
{
    protected override IFoo GetFoo()
    {
        return new Foo();
    }
}

[TestFixture]
public class BarTests : TestBase
{
    protected override IFoo GetFoo()
    {
        return new Bar();
    }
}
1
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: