【发布时间】:2016-01-20 06:49:51
【问题描述】:
我有一个类和方法,即。 -
public class Class1
{
public void SomeMethod(int x, int y)
{
using(var scope = new TransactionScope())
{
if(x == 0 && y == 0)
{
//Do Something
}
if(x ==1)
{
//Do something
}
// Need to throw an exception for running a test case to check
// rollback scenario
if(y == 2)
{
//Do something
}
scope.Complete();
}
}
}
我想测试事务范围回滚的东西,所以我想在上面的代码之间注入一个异常(即想用throw new Exception("some message")) 并运行内存中重新编译的方法以测试代码执行之间是否出现问题,然后将回滚。我不想更改现有代码中的任何内容用于测试回滚场景。
无论我读到什么关于 Roslyn 的内容(我对这个 .NET 领域非常陌生),我认为可以使用一些 Roslyn API 来完成。但是我不确定该怎么做,因为我不太熟悉。如果有人可以提供一些基于示例的建议,那将非常有帮助。
【问题讨论】:
-
我会注入一个抛出的
Do something。但我会使用正常的 DI 实践。 -
顺便说一句,“Roslyn”是 .NET(Visual C# 和 Visual Basic)的新编译器平台,仅适用于源代码文本。没有办法重新编译。它只是编译!
-
@PauloMorgado:对我来说,为了一个单一的测试目的而注入一些东西(可能是一些 Action 方法对象)似乎是一种开销,并且还需要在代码中调用该操作,这将是实际上在生产代码中没有用。如果我提供 Roslyn API 的相对文件路径,是否可以达到上述目的?我已经准备好一起创建一个新文件了,遵循 Open Closed 原则应该没问题。
-
DI 可以像委托一样简单,但可以更深入。它有利于可测试性,这正是您所寻找的。尽管如此,为了给你指明你想要的方向,Jash Varty 在his blog 上发布了一系列关于使用“Roslyn”的博文。
-
@sandipray 如果您担心会影响生产代码,请将该代码放入预编译器检查,以便仅在测试时编译。我想你正在尝试做的事情将变得足够困难,以至于你搞砸如何测试它的可能性大于你搞砸正在测试的实际方法。如果测试中的错误概率高于被测试事物的错误概率,那么您并没有真正从测试中获得价值。