Delayed NUnit Assert message evaluation

后端 未结 3 1003
广开言路
广开言路 2021-02-20 10:09

I have this assert in my test code

Assert.That(() => eventData.Count == 0,
Is.True.After(notificationPollingDelay),
\"Received unexpected event with last even         


        
相关标签:
3条回答
  • 2021-02-20 10:26

    In NUnit version 3.50 I had to use a different syntax. Here is the example:

    var constraint = Is.True.After( delayInMilliseconds: 100000, pollingInterval: 100);
    Assert.That( () => yourCondition, constraint );
    


    This will test whether yourCondition is true waiting a certain maximum time using the DelayedConstraint created by the Is.True.After method.

    In this example the DelayedConstraint is configured to use maximum time of 100 seconds polling every 0.1 seconds.

    See aslo the legacy NUnit 2.5 documentation for DelayedConstraint.

    0 讨论(0)
  • 2021-02-20 10:30

    You may use this scheme:

    var constrain = Is.True.After(notificationPollingDelay);
    var condition = constrain.Matches(() => eventData.Count == 0);
    Assert.IsTrue(condition, 
                  "Received unexpected event with last event data" + 
                  eventData.Last().Description());
    

    This method is similar to the use Thread.Sleep

    0 讨论(0)
  • 2021-02-20 10:31

    The simplest answer is "don't include that text in your failure message". I personally almost never include a failure message; if your test is atomic enough you don't need to do it. Usually if I need to figure out a cryptic failure, only a debugger helps anyway.

    If you really want to do it, this code should work without managing the threads yourself.

    try
    {
        Assert.That(() => eventData.Count == 0, Is.True.After(notificationPollingDelay));
    }
    catch(AssertionException)
    {
        throw new Exception("Received unexpected event with last event data" + eventData.Last().Description());
    }
    
    0 讨论(0)
提交回复
热议问题