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