C# 正在从当前运行的单元测试获取信息
我必须从助手类的静态方法中查找有关当前运行的UnitTest的信息。 这个想法是从每个测试中获得一个唯一的密钥 我考虑过使用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
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);
}
}