可以减少类型参数的数量吗?
Can one reduce the number of type parameters?
我觉得很烦人,因为必须在下面对 RunTest 的调用中指定 Foo 和 FooFactory 的类型。毕竟,如果测试知道工厂的类型,则隐含了工厂正在创建的类型。假设我想 运行 对不同 类 的工厂进行大量不同的工厂测试,那就是很多尖括号,并且随着类型层次结构的丰富而变得更糟。我想知道是否可以重组它以使测试更简洁。
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());
}
}
不清楚 TFactory
是否必须是类型参数。我会这样写:
internal void RunTest<T>(IFactory<T> factory)
{
T t = factory.Create();
Assert.NotEqual(default(T), t);
}
那么你可以使用:
RunTest(new FooFactory());
因为Foo
可以被编译器推断出来。
我觉得很烦人,因为必须在下面对 RunTest 的调用中指定 Foo 和 FooFactory 的类型。毕竟,如果测试知道工厂的类型,则隐含了工厂正在创建的类型。假设我想 运行 对不同 类 的工厂进行大量不同的工厂测试,那就是很多尖括号,并且随着类型层次结构的丰富而变得更糟。我想知道是否可以重组它以使测试更简洁。
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());
}
}
不清楚 TFactory
是否必须是类型参数。我会这样写:
internal void RunTest<T>(IFactory<T> factory)
{
T t = factory.Create();
Assert.NotEqual(default(T), t);
}
那么你可以使用:
RunTest(new FooFactory());
因为Foo
可以被编译器推断出来。