Cannot find Assert.Fail and Assert.Pass or equivalent

.Netxunit.net

.Net Problem Overview


I used to use these in NUnit and they are really useful. Any idea how to do something like that?

EDIT, CODE SAMPLE:

        bool condition = false;//would be nice not to have this
        observable.Subscribe(_ =>
        {
            if (real test)
                condition= true;//Assert.Pass()
        });
        StartObservable();
        Assert.True(condition);//Assert.Fail()      

.Net Solutions


Solution 1 - .Net

The documentation includes a comparison chart including this:

> Fail - xUnit.net alternative: Assert.True(false, "message")

(It doesn't show Assert.Pass, and I've never used that myself, but I suspect the alternative is just to return from the test. Of course that doesn't help if you want to throw it in a nested method call. My suspicion is that it's not very frequently used in NUnit, hence its absence in the comparison chart.)

Solution 2 - .Net

An alternative to Assert.Fail("messsage") suggested by xUnit docs

> xUnit.net alternative: Assert.True(false, "message")

has a downside – its output is

message

Expected: True
Actual:   False

To get rid of

> Expected: True > Actual: False

don't call Assert.True(false, "message") throw Xunit.Sdk.XunitException instead.
For example, create a helper method similar to this:

public static class MyAssert
{
    public static void Fail(string message)
        => throw new Xunit.Sdk.XunitException(message);
}

Solution 3 - .Net

Just throw an exception to satisfy both requirements (exiting a nested loop and an alternative to the missing Assert.Fail method). Only issue is there is no decent base exception (e.g. TestException) to use in order to avoid getting warnings about using the base Exception class, so something more directed like an InvalidOperationException is probably a good choice.

Solution 4 - .Net

Another way to get Pass assert is to create new assert.

public static class ExtraAssert
{
    public static void Pass(this Microsoft.VisualStudio.TestTools.UnitTesting.Assert assert)
    {
        return;
    }
 }

There is a catch however, because you could only access that method using 'That' keyword.

Assert.That.Pass();

ref: https://www.meziantou.net/mstest-v2-create-new-asserts.htm

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionnaeron84View Question on Stackoverflow
Solution 1 - .NetJon SkeetView Answer on Stackoverflow
Solution 2 - .NetNikView Answer on Stackoverflow
Solution 3 - .NetTony WallView Answer on Stackoverflow
Solution 4 - .NetAriwibawaView Answer on Stackoverflow