Поддерживает ли NUnit свободный синтаксис для динамики C #? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть тестовый пример 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);

Спасибо за ваши ответы.

Ответы [ 3 ]

2 голосов
/ 16 сентября 2011

json-объект - это IDictionary , поэтому вы можете использовать его методы.

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

Я не использовал nunit free api, но я предполагаю, что может быть какой-то метод, такой как Has.Key ()

2 голосов
/ 17 сентября 2011

прабир дает мне хорошее предложение.По крайней мере, я мог бы проверить динамический как 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
0 голосов
/ 13 сентября 2011

Поэтому, если userInfo является IDynamicMetaObjectProvider, я считаю, что NUnit Has не будет работать. Возможность изменения API ограничения NUnit для работы зависит от того, как он реализован. Если это реализовано с отражением, можно использовать динамический вызов вместо . Однако если он реализован с помощью выражений, он никогда не будет работать с реальными динамическими объектами.

...