【问题标题】:Finding where a method is called for a convention test查找为约定测试调用方法的位置
【发布时间】:2013-05-06 04:57:43
【问题描述】:

我正在尝试编写一个约定测试,指定只应在某些上下文中调用一个方法 - 具体来说,我有一个静态 Empty getter,我只想允许在测试方法中使用它,与用 @ 装饰的方法相比987654323@.

我知道我还应该将 getter 标记为已过时,使用其他方法等,但我还希望围绕此进行约定测试,以便将来不会中断。

我猜我想在我的约定测试中通过反射使用静态分析。我将如何进行这种分析?

【问题讨论】:

  • 反射不会提供你的方法的实现细节(主体)。您应该使用类似于 Roslyn 的东西。我建议在您的问题中添加标签 roslyn,以便您从它的团队那里获得帮助,就像 Eric Lippert 对 stackoverflow.com/questions/15891197/… 所做的那样

标签: c# tdd convention roslyn


【解决方案1】:

是的,Roslyn 可以在这类事情上提供帮助。这可能看起来像一个独立的分析的一个例子是这样的:

var solution = Solution.Load(pathToSolution);
foreach (var project in solution.Projects)
{
    var type = project.GetCompilation().GetTypeByMetadataName(typeNameContainingMethod);
    var method = type.GetMembers("Empty").Single();
    var references = method.FindAllReferences(solution);
    foreach (var referencedSymbol in references)
    {
        foreach (var referenceLocation in references)
        {
            CheckIfCallIsAllowed(referenceLocation);
        }
    }
}

您还可以查看创建代码问题演练和 Roslyn CTP 附带的代码问题模板,了解在编辑时而不是在测试中执行此操作的另一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2013-04-13
    • 2013-10-18
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多