C# 正在从当前运行的单元测试获取信息

C# 正在从当前运行的单元测试获取信息,c#,multithreading,unit-testing,testcontext,C#,Multithreading,Unit Testing,Testcontext,我必须从助手类的静态方法中查找有关当前运行的UnitTest的信息。 这个想法是从每个测试中获得一个唯一的密钥 我考虑过使用TestContext,不确定是否可行 例 [TestClass] public void MyTestClass { public TestContext TestContext { get; set; } [TestMethod] public void MyTestMethod() { TestContext.Prop

我必须从助手类的静态方法中查找有关当前运行的UnitTest的信息。 这个想法是从每个测试中获得一个唯一的密钥

我考虑过使用
TestContext
,不确定是否可行

[TestClass]
public void MyTestClass
{
    public TestContext TestContext { get; set; }

    [TestMethod]
    public void MyTestMethod()
    {
        TestContext.Properties.Add("MyKey", Guid.NewGuid());

        //Continue....
    }
}


public static class Foo
{

    public static Something GetSomething()
    {
        //Get the guid from test context.
        //Return something base on this key
    }

}
我们目前正在使用
thread.SetData
将此密钥存储在线程上,但如果测试代码生成多个线程,则会出现问题。对于每个线程,我需要为给定的单元测试获得相同的密钥

不会从unittest本身调用
Foo.GetSomething()
。调用它的代码是Unity注入的模拟

编辑

我将稍微解释一下上下文,因为它似乎令人困惑

通过unity创建的对象是实体框架的上下文。当运行单元测试时,上下文在由
Foo.GetSomething
创建的结构中获取数据。让我们称之为
datapersistence

datapersistence
不能是单例,因为单元测试会相互影响

我们目前每个线程有一个
datapersistence
实例,只要测试的代码是单线程的,witch就很好

我希望每个单元测试有一个
datapersistence
实例。如果a可以在每个测试中获得唯一的guid,我可以解析此测试的实例

public static class Foo
{   
    public static Something GetSomething(Guid guid)
    {
        //Return something base on this key
        return new Something();
    } 
}
测试:


为什么不把它作为参数传递给helper类?问题是什么?@Darin:因为helper类是静态的,它在很远的地方被通过Unity创建的对象调用。通过Unity创建的?这是什么东西?我以为它是专门为单元测试创建的助手类?不是这样吗?我希望这不是在测试中的实际代码中使用的实际类。
Foo.GetSomething
不是直接从测试方法调用的。您想要实现什么?伪造数据库?以某种方式,是的。创建一个
存储库
并伪造你的
存储库
。目前,我们正在模拟存储库背后的上下文-这不会很快改变,因为它适用于95%的情况。也就是说,我怀疑我在模拟存储库时会遇到同样的问题。
[TestClass]
public void MyTestClass
{
    public TestContext TestContext { get; set; }

    [TestMethod]
    public void MyTestMethod()
    {
        Guid guid = ...;
        Something something = Foo.GetSomething(guid);
    }
}