615fa1f46c
We want tests to verify that specific refactroing is not available in some test cases. |
||
---|---|---|
Source | ||
Tools | ||
.gitattributes | ||
.gitignore | ||
BuildAndPackage.ps1 | ||
Common.targets | ||
License.txt | ||
README.md | ||
RoslynNUnitLight.nuspec | ||
RoslynNUnitLight.sln |
README.md
RoslynNUnitLight
A lightweight framework for writing unit tests for Roslyn diagnostic analyzers, code fixes and refactorings using NUnit.
Quick Start
-
Install the RoslynNUnitLight package from NuGet into your project.
-
Create a new class that inherits from one of the provided
*TestFixture
classes that matches what are going to test.DiagnosticAnalyzer
=AnalyzerTestFixture
CodeFixProvider
=CodeFixTestFixture
CodeRefactoringProvider
=CodeRefactoringTestFixture
-
Override the
LanguageName
property and return the appropriate value fromMicrosoft.CodeAnalysis.LanguageNames
, depending on what language your tests will target. -
Override the
CreateAnalyzer
orCreateProvider
method and return an instance of your analyzer or provider. -
Write tests!
Writing Unit Tests
RoslynNUnitLight accepts strings that are marked up with [|
and |]
to identify a particular span. This could represent the span of an expected
diagnostic or the text selection before a refactoring is applied.
Example: Test presence of a diagnostic
[Test]
public void AutoPropDeclaredAndUsedInConstructor()
{
const string code = @"
class C
{
public bool MyProperty { get; [|private set;|] }
public C(bool f)
{
MyProperty = f;
}
}";
HasDiagnostic(code, DiagnosticIds.UseGetterOnlyAutoProperty);
}
Example: Test absence of a diagnostic
[Test]
public void AutoPropAlreadyReadonly()
{
const string code = @"
class C
{
public bool MyProperty { get; }
public C(bool f)
{
MyProperty = f;
}
}";
NoDiagnostic(code, DiagnosticIds.UseGetterOnlyAutoProperty);
}
Example: Test code fix behavior
[Test]
public void TestSimpleProperty()
{
const string markupCode = @"
class C
{
public bool P1 { get; [|private set;|] }
}";
const string expected = @"
class C
{
public bool P1 { get; }
}";
TestCodeFix(markupCode, expected, DiagnosticDescriptors.UseGetterOnlyAutoProperty);
}
Example: Test code refactoring behavior
[Test]
public void SimpleTest()
{
const string markupCode = @"
class C
{
void M()
{
var s = [|string.Format(""{0}"", 42)|];
}
}";
const string expected = @"
class C
{
void M()
{
var s = $""{42}"";
}
}";
TestCodeRefactoring(markupCode, expected);
}