dotnet / dotnet/scenario-tests

Refactor scenario tests to be completely metadata driven.

Open
#22 2 comments 1 reaction 0 assignees View on GitHub
Dominant language
Shell
Stars
7
Forks
26
Avg merge
3d 7h
Merged PRs (30d)
11

Description

Currently the scenarios tests are defined with the following pattern:

```
[Theory]
[MemberData(nameof(GetLanguages))]
public void VerifyClasslibTemplate(DotNetLanguage language)
{
var newTest = new SdkTemplateTest(
nameof(SdkTemplateTests), language, _scenarioTestInput.TargetRid, DotNetSdkTemplate.ClassLib,
DotNetSdkActions.Build | DotNetSdkActions.Publish);
newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
}

[Theory]
[MemberData(nameof(GetLanguages))]
public void VerifyXUnitTemplate(DotNetLanguage language)
{
var newTest = new SdkTemplateTest(
nameof(SdkTemplateTests), language, _scenarioTestInput.TargetRid, DotNetSdkTemplate.XUnit,
DotNetSdkActions.Test);
newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
}
```

There is a fair amount of overhead/duplication with this pattern when the SdkTemplateTest constructor call is the differing logic. MemberData could be utilized to define all of this in a more metadata driven approach. Adding a new test case requires defining a single list declaring the test scenario metadata.

```
[Theory]
[MemberData(nameof(GetScenarios))]
public void VerifyXUnitTemplate(TestScenario testScenario)
{
testScenario.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
}

private static IEnumerable GetScenarios()
{
foreach (DotNetLanguage language in Enum.GetValues())
{
yield return new(language, _scenarioTestInput.TargetRid, DotNetSdkTemplate.XUnit, DotNetSdkActions.Test),
yield return new(language, _scenarioTestInput.TargetRid, DotNetSdkTemplate.ClassLib, DotNetSdkActions.Build | DotNetSdkActions.Publish)
}
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.