Wil*_*sch 18 c# type-parameter
我觉得很烦人,必须在下面的RunTest调用中指定Foo和FooFactory的类型.毕竟,如果测试知道Factory的类型,则暗示了Factory正在创建的类型.假设我想为不同类的工厂运行许多不同的工厂测试,那就是很多尖括号,而且更丰富的类型层次结构会变得更糟.我想知道是否有可能对其进行重组以使测试更简洁.
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());
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 53
目前尚不清楚它TFactory必须是一个类型参数.我写这个:
internal void RunTest<T>(IFactory<T> factory)
{
T t = factory.Create();
Assert.NotEqual(default(T), t);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
RunTest(new FooFactory());
Run Code Online (Sandbox Code Playgroud)
如Foo可以由编译器来推断.
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |