使用Roslyn评估存储在字符串中的布尔表达式

时间:2018-04-11 14:32:55

标签: c# roslyn roslyn-code-analysis

目前我正在为一个应用程序进行一些集成测试,这种情况存储在一个json文件中,单元测试的断言部分也存储在那个json 中,所以我需要解析该字符串为布尔值或其他东西。

我已经尝试过使用Roslyn但是我无法使其工作,它正在抛出这个例外:

  

Microsoft.CodeAnalysis.Scripting.CompilationErrorException:(1,1):error CS0103:当前上下文中不存在名称“entry”

带有案例的json文件如下所示:

  "entries": [
    {
      "name": "SayHello",
      "request": {
        "text": "Hello",
        "id": "61hacck8j6jg"
      },
      "response": {
        "text": "Hello",
        "id": "47me557ikbf7"
      },
      "assert": "Entry.Request.Text == Entry.Response.Text"
    }
  ]

尝试过这样的事情:

object result = await CSharpScript.EvaluateAsync("entry.Request.Text == entry.Response.Text");

尝试使用小写,大写,与创建的类相同的样式,仍然无效。

此解决方案的源代码是here,也许您可​​以在那里获得更多信息。

修改:上面解释的代码为here

的文件

1 个答案:

答案 0 :(得分:0)

使用Globals课程。

public class Globals
{
    /// <summary>
    /// ExpectedResponse
    /// </summary>
    public Activity Request;
    /// <summary>
    /// ReceivedResponse
    /// </summary>
    public Activity Response;
}

然后在测试中传递参数,有点@SLaks在评论中说:

/// Arrange
var globals = new Globals { Request = entry.Response, Response = latestResponse };

/// Assert
Assert.IsTrue(await CSharpScript.EvaluateAsync<bool>(entry.Assert, globals: globals));

希望这有助于某人!