Можно ли уменьшить количество параметров типа?
Я нахожу, что это раздражает то, что нужно указать типы Foo и FooFactory в вызове RunTest ниже. В конце концов, если тест знает тип фабрики, подразумевается тип, создаваемый фабрикой. Предполагая, что я хочу запускать множество различных заводских тестов для фабрик разных классов, это много угловых скобок, и это становится хуже с более богатыми иерархиями типов. Мне интересно, можно ли реструктурировать это, чтобы тест был более кратким.
public class Foo
{
}
public interface IFactory<T>
{
T Create();
}
public class FooFactory : IFactory<Foo>
{
public Foo Create()
=> new Foo();
}
public class FactoryTest
{
internal void RunTest<TFactory, T>(TFactory factory)
where TFactory : IFactory<T>
{
T t = factory.Create();
Assert.NotEqual(default(T), t);
}
[Fact]
public void FooFactoryWorks()
{
RunTest<FooFactory, Foo>(new FooFactory());
}
}
Ответы
Ответ 1
Не ясно, что TFactory
должен быть параметром типа вообще. Я бы написал следующее:
internal void RunTest<T>(IFactory<T> factory)
{
T t = factory.Create();
Assert.NotEqual(default(T), t);
}
Тогда вы можете просто использовать:
RunTest(new FooFactory());
поскольку Foo
может быть выведен компилятором.