Edit on GitHub

xUnit2018   v2 v3   Warning

Do not compare an object's exact type to an abstract class or interface

Cause

This rule is triggered by using Assert.IsType or Assert.IsNotType with an interface or abstract type.

Reason for rule

The checks for Assert.IsType and Assert.IsNotType are an exact type check, which means no value can ever satisfy the test. You should use Assert.IsAssignableFrom or Assert.IsNotAssignableFrom instead. (Note: Assert.IsNotAssignableFrom was introduced in xUnit.net v2 2.5, so you may need to upgrade in order to use it.)

How to fix violations

To fix a violation of this rule, you may:

Examples

Violates

using System;
using Xunit;

public class xUnit2018
{
    [Fact]
    public void TestMethod()
    {
        var result = new object();

        Assert.IsType<IDisposable>(result);
        Assert.IsNotType<IDisposable>(result);
    }
}

Does not violate

using System;
using Xunit;

public class xUnit2018
{
    [Fact]
    public void TestMethod()
    {
        var result = new object();

        Assert.IsAssignableFrom<IDisposable>(result);
        Assert.IsNotAssignableFrom<IDisposable>(result);
    }
}
using System;
using Xunit;

public class xUnit2018
{
    [Fact]
    public void TestMethod()
    {
        var result = new object();

        Assert.IsType<object>(result);
        Assert.IsNotType<object>(result);
    }
}
Copyright © .NET Foundation. Contributions welcomed at https://github.com/xunit/xunit/tree/gh-pages.