The test fixtures in UnityDataTool.Tests each re-implement the same two pieces of scaffolding.
Running a command and capturing its output. Every fixture that needs to assert on what a command
printed redirects Console.Out / Console.Error into a StringWriter, calls Program.Main, and
restores the originals in a finally. There are three named variants of this —
AnalyzeOverwriteTests.RunAnalyze (stderr only), AnalyzeExitCodeTests.RunAnalyze (both streams),
FindRefsTests.RunFindRefsOn — plus a large number of copies written inline inside individual test
methods, for example the two no-TypeTree tests in UnityDataToolPlayerDataTests.
Output folder setup and teardown. OneTimeSetup creates a per-fixture folder under the test
directory and SetCurrentDirectorys into it; Teardown calls SqliteConnection.ClearAllPools() and
deletes the folder's files and subdirectories. This block is duplicated nearly verbatim across
roughly 15 fixtures.
Neither is causing bugs, but it means a change to how tests run a command or clean up has to be made
in many places, and each new fixture starts by copying 40 lines.
Suggested shape:
- A shared helper that runs a command and returns
(exitCode, stdout, stderr) — or combined output,
which is what most assertions want. SQLTestHelper is the project's existing shared helper but is
SQL-specific, so a small separate helper class is probably a better home.
- A base fixture (or a helper method) for the output-folder creation and teardown.
Then migrate the fixtures over, which can be done incrementally.
Raised during the review of the fix for #115, which added one more copy of both patterns.
The test fixtures in
UnityDataTool.Testseach re-implement the same two pieces of scaffolding.Running a command and capturing its output. Every fixture that needs to assert on what a command
printed redirects
Console.Out/Console.Errorinto aStringWriter, callsProgram.Main, andrestores the originals in a
finally. There are three named variants of this —AnalyzeOverwriteTests.RunAnalyze(stderr only),AnalyzeExitCodeTests.RunAnalyze(both streams),FindRefsTests.RunFindRefsOn— plus a large number of copies written inline inside individual testmethods, for example the two no-TypeTree tests in
UnityDataToolPlayerDataTests.Output folder setup and teardown.
OneTimeSetupcreates a per-fixture folder under the testdirectory and
SetCurrentDirectorys into it;TeardowncallsSqliteConnection.ClearAllPools()anddeletes the folder's files and subdirectories. This block is duplicated nearly verbatim across
roughly 15 fixtures.
Neither is causing bugs, but it means a change to how tests run a command or clean up has to be made
in many places, and each new fixture starts by copying 40 lines.
Suggested shape:
(exitCode, stdout, stderr)— or combined output,which is what most assertions want.
SQLTestHelperis the project's existing shared helper but isSQL-specific, so a small separate helper class is probably a better home.
Then migrate the fixtures over, which can be done incrementally.
Raised during the review of the fix for #115, which added one more copy of both patterns.