如果我向 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