如果我向 class 添加通用约束,则无法识别单元测试
Unit test not recognized if i add a generic constrain to the class
我想为我的单元测试添加一个通用约束 class
public class CacheOperationsUnitTests<T>
{
private ITCache<T> ICacheStore;
static readonly IUnityContainer container = new UnityContainer();
static CacheOperationsUnitTests()
{
container.RegisterType(typeof(ITCache<>), typeof(TRedisCacheStore<>), (new ContainerControlledLifetimeManager()));
}
public CacheOperationsUnitTests()
{
ICacheStore = container.Resolve<TRedisCacheStore<T>>();
}
但是,当我这样做时,测试资源管理器无法识别我的单元测试,当我尝试 运行 单元测试时,我会看到以下内容:
No test is available in F:\projects\Development VSTO\TRF Dev ( Performance ) New\Perf\SSRProd\Caching.UnitTests\bin\Debug\Caching.UnitTests.dll. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.**
当我从 class 名称中删除 <T>
时工作正常,但我需要 <T>
因为我的代码中需要它们:
private ITCache<T> ICacheStore;
伤害您的不是一般约束;通用约束是“where T : SomeWhatever
”部分 - 你没有那个。在这里伤害你的是添加了一个 通用类型参数 - 即本身就是通用的。
假设您是一名试跑者。你可以看到一个
public class SomeTests<T> {}
有 public 看起来像测试的方法。现在;你如何创建一个实例? T
你选什么?您不能创建开放泛型类型的实例 - 您需要一个具体类型,例如 SomeTests<Bar>
(对于某些类型 Bar
)。
一个选项可能是:
public abstract class CacheOperationsUnitTests<T>
public class FooCacheOperationsUnitTests : CacheOperationsUnitTests<Foo>
public class BarCacheOperationsUnitTests : CacheOperationsUnitTests<Bar>
// plus whatever other T you need
但是,我强烈怀疑您可以简单地从测试中删除泛型,并使用特定的具体类型代替 T
。
我想为我的单元测试添加一个通用约束 class
public class CacheOperationsUnitTests<T>
{
private ITCache<T> ICacheStore;
static readonly IUnityContainer container = new UnityContainer();
static CacheOperationsUnitTests()
{
container.RegisterType(typeof(ITCache<>), typeof(TRedisCacheStore<>), (new ContainerControlledLifetimeManager()));
}
public CacheOperationsUnitTests()
{
ICacheStore = container.Resolve<TRedisCacheStore<T>>();
}
但是,当我这样做时,测试资源管理器无法识别我的单元测试,当我尝试 运行 单元测试时,我会看到以下内容:
No test is available in F:\projects\Development VSTO\TRF Dev ( Performance ) New\Perf\SSRProd\Caching.UnitTests\bin\Debug\Caching.UnitTests.dll. Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.**
当我从 class 名称中删除 <T>
时工作正常,但我需要 <T>
因为我的代码中需要它们:
private ITCache<T> ICacheStore;
伤害您的不是一般约束;通用约束是“where T : SomeWhatever
”部分 - 你没有那个。在这里伤害你的是添加了一个 通用类型参数 - 即本身就是通用的。
假设您是一名试跑者。你可以看到一个
public class SomeTests<T> {}
有 public 看起来像测试的方法。现在;你如何创建一个实例? T
你选什么?您不能创建开放泛型类型的实例 - 您需要一个具体类型,例如 SomeTests<Bar>
(对于某些类型 Bar
)。
一个选项可能是:
public abstract class CacheOperationsUnitTests<T>
public class FooCacheOperationsUnitTests : CacheOperationsUnitTests<Foo>
public class BarCacheOperationsUnitTests : CacheOperationsUnitTests<Bar>
// plus whatever other T you need
但是,我强烈怀疑您可以简单地从测试中删除泛型,并使用特定的具体类型代替 T
。