【问题标题】:Does NUnit supports fluent syntax for C# dynamics?NUnit 是否支持 C# 动态的流畅语法?
【发布时间】:2011-09-12 16:14:25
【问题描述】:

我有一个 nUnit 测试用例,它断言从 Facebook C# SDK 返回的动态。有什么方法可以使用 NUnit 流利的语法来断言它。这是我正在寻找的非常简化的示例:

// not working
var client = new FacebookClient(accessToken);
dynamic userInfo = client.Get("me");
Assert.That(userInfo, Is.Not.Null);
Assert.That(userInfo, Has.Property("id").Not.Null);
Assert.That(userInfo, Has.Property("name").Not.Null);

现在我只能通过直接指定“属性”来测试

// working, but not fluent
var client = new FacebookClient(accessToken);
dynamic userInfo = client.Get("me");
Assert.That(userInfo, Is.Not.Null);
Assert.That(userInfo.id, Is.Not.Null);
Assert.That(userInfo.name, Is.Not.Null);

感谢您的回答。

【问题讨论】:

    标签: c# unit-testing dynamic nunit facebook-c#-sdk


    【解决方案1】:

    json 对象是 IDictionary 所以你可以使用它的方法。

    var client = new FacebookClient(accessToken);
    dynamic userInfo = client.Get("me");
    var hasId = userInfo.ContainsKey("id");
    

    我没有使用过 nunit fluent api,但我猜可能有一些方法,比如 Has.Key()

    【讨论】:

      【解决方案2】:

      prabir 给了我一个很好的建议。至少我可以将动态检查为 IDictionary 并使用 CollectionAssert.IsSubsetOf 进行测试。它不是 100% 涵盖我正在寻找的内容,但它是最接近的建议。

      var client = new FacebookClient(accessToken);
      dynamic userInfo = client.Get("me");
      Assert.That(userInfo, Is.Not.Null);
      
      var requiredDynamicProperties = new[] { "id", "name", "wtf" };
      
      var dictionary = (userInfo as IDictionary<string, Object>);
      
      CollectionAssert.IsSubsetOf(requiredDynamicProperties, dictionary.Keys); 
      // message will describe in details that no "wtf" found
      

      【讨论】:

        【解决方案3】:

        所以如果 userInfo 是一个 IDynamicMetaObjectProvider,我相信 NUnit Has 不会起作用。是否可以修改 NUnit 约束 API 以使其工作取决于它是如何实现的。如果它是通过反射实现的,则可以使用dynamic invocation instead。但是,如果它是用表达式实现的,它将永远无法与真正的动态对象一起使用。

        【讨论】:

        • 现在我在NUnit forum 上得到了答案——目前不支持此功能
        猜你喜欢
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        相关资源
        最近更新 更多