v2
v3
Warning
xUnit2018
"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:
- Change
Assert.IsType
toAssert.IsAssignableFrom
and/orAssert.IsNotType
toAssert.IsNotAssignableFrom
. - Convert the check to use a non-interface/abstract type
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);
}
}