2014-08-28 5 views
9

धाराप्रवाह कथनों का उपयोग करना, मैं जोर देने के लिए एक दिया स्ट्रिंग है कि या तो चाहते हैं दो तार में से एक:Fluent दावे: एक या एक और मूल्य का दावा

actual.Should().Contain("oneWay").Or().Should().Contain("anotherWay"); 
// eiter value should pass the assertion. 
// for example: "you may do it oneWay." should pass, but 
// "you may do it thisWay." should not pass 

सिर्फ अगर मूल्यों का न तो निहित है, अभिकथन विफल होना चाहिए। यह काम नहीं करता है (यहां तक ​​कि संकलित भी नहीं) क्योंकि Or() ऑपरेटर नहीं है।

यह मैं इसे कैसे अब क्या है:

bool isVariant1 = actual.Contains(@"oneWay"); 
bool isVariant2 = actual.Contains(@"anotherWay"); 
bool anyVariant = (isVariant1 || isVariant2); 
anyVariant.Should().BeTrue("because blahblah. Actual content was: " + actual); 

यह वर्बोज़ है, और "क्योंकि" तर्क एक सार्थक उत्पादन के लिए मैन्युअल रूप से बनाए गए होना आवश्यक है।

क्या इसे और अधिक पढ़ने योग्य तरीके से करने का कोई तरीका है? एक समाधान भी Be(), HaveCount() आदि की तरह, अन्य धाराप्रवाह अभिकथन प्रकार के लिए आवेदन करना चाहिए ...

मैं .NET 3.5 पर FluentAssertions संस्करण 2.2.0.0 का उपयोग कर रहा है कि अगर मायने रखती है।

उत्तर

9

मैं इसे स्ट्रिंग दावे के लिए एक विस्तार होगा। कुछ इस तरह:

public static void BeAnyOf(this StringAssertions assertions, string[] expectations, string because, params string[] args) { 
    Execute.Assertion 
      .ForCondition(expectations.Any(assertions.Subject.Contains)) 
      .BecauseOf(because, args) 
      .FailWith("Expected {context:string} to be any of {0}{reason}", expectations); 
} 

तुम भी repository कांटा और यह अगले संस्करण का हिस्सा बनाने के लिए एक Pull Request के साथ मुझे प्रदान कर सकता है।

1

आप इसे एक छोटे से अधिक पठनीय एक सरल स्ट्रिंग विस्तार लिख कर कर सकता है:

actual.ContainsAnyOf("oneWay", "anotherWay").Should().BeTrue("because of this reason"); 

दुर्भाग्य से यह "कारण" के साथ मदद नहीं करता है:

public static class StringExt 
{ 
    public static bool ContainsAnyOf(this string self, params string[] strings) 
    { 
     return strings.Any(self.Contains); 
    } 
} 

तो फिर तुम ऐसा कर सकता है संदेश का हिस्सा है, लेकिन मुझे लगता है कि यह थोड़ा बेहतर है।

+1

असल में, जब यह विफल रहता है, तो आप कोई सुराग नहीं क्या गलत है की है। –

8

इस काम नहीं करना चाहिए?

actual.Should().BeOneOf("oneWay", "anotherWay"); 

मुझे v3.1.229 प्रयोग करने के लिए काम किया।

+0

मेरे लिए नहीं, क्योंकि मैं पूरी स्ट्रिंग सामग्री पर जोर नहीं देना चाहता, लेकिन केवल वास्तविक मूल्य में आंशिक रूप से मूल्यों में से एक है। – Marcel

संबंधित मुद्दे