site/xunit.analyzers/rules/xUnit2018.md
This rule is triggered by using Assert.IsType or Assert.IsNotType with an interface or abstract type.
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.)
To fix a violation of this rule, you may:
Assert.IsType to Assert.IsAssignableFrom and/or Assert.IsNotType to Assert.IsNotAssignableFrom.using System;
using Xunit;
public class xUnit2018
{
[Fact]
public void TestMethod()
{
var result = new object();
Assert.IsType<IDisposable>(result);
Assert.IsNotType<IDisposable>(result);
}
}
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);
}
}