Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

テストクラスのベースクラスを作成しテストコードを更新する #804

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
68cdcf0
単体テストプロジェクトにLoggerを使うテストクラスのベースクラスを追加
tsuna-can-se Feb 7, 2024
0789cc1
Dressca.UnitTestsのLoggerを使うテストクラスでTestBaseを継承するよう変更
tsuna-can-se Feb 7, 2024
4959c14
ConsoleAppWithDIの結合テストプロジェクトにテストのベースクラスを追加
tsuna-can-se Feb 7, 2024
38134a6
TestBaseを使うようにConsoleAppWithDIの結合テストを修正
tsuna-can-se Feb 7, 2024
182f2d0
ConsoleAppWithDIの単体テストプロジェクトにテストのベースクラスを追加
tsuna-can-se Feb 7, 2024
102890f
TestBaseを使うようにConsoleAppWithDIの単体テストを修正
tsuna-can-se Feb 7, 2024
defbc2f
カタログアイテムが見つからないときのログレベルを情報に変更
tsuna-can-se Feb 8, 2024
c987d12
情報ログの出力を確認する単体テストを追加
tsuna-can-se Feb 8, 2024
dfa1747
LiveUnitTestingの設定ファイルを除外設定に追加
tsuna-can-se Feb 8, 2024
fb295ac
テストコードの実装パターンで抵触する情報レベルのエラー通知を無効化
tsuna-can-se Feb 8, 2024
9b875bb
Dressca.UnitTestsのテストメソッド名でテスト仕様を表現するように修正
tsuna-can-se Feb 8, 2024
6d8fd88
コンストラクターの必要なテストクラスでプライマリーコンストラクターを利用するよう修正
tsuna-can-se Feb 8, 2024
2f9574c
不要なusingを削除
tsuna-can-se Feb 8, 2024
edb5592
Dressca.UnitTestsのコレクション検証処理で要素数が1のものを検証する場合Assert.Singleを利用するように修正
tsuna-can-se Feb 8, 2024
f02c7d9
Dressca.UnitTestsの配列、リスト初期化処理を簡易構文に修正
tsuna-can-se Feb 8, 2024
ee407d4
Dressca.UnitTestsで要素数が0の検証をCountプロパティで実施するよう変更
tsuna-can-se Feb 8, 2024
798bbac
nullを許容する箇所でNull許容参照型を利用するように修正
tsuna-can-se Feb 8, 2024
e6c8704
オブジェクト初期化の簡易構文を利用するよう修正
tsuna-can-se Feb 8, 2024
10027b1
プライマリーコンストラクターを使用するように修正
tsuna-can-se Feb 8, 2024
d54ad5b
テストメソッド名にテスト仕様を含めるように修正
tsuna-can-se Feb 8, 2024
68fb099
defaultの短縮構文を利用するように修正
tsuna-can-se Feb 8, 2024
b5f29db
テストメソッド名にテスト仕様を含めるよう修正
tsuna-can-se Feb 8, 2024
bc2b8be
MemberDataAttributeの対象データにTheoryDataを利用するよう修正
tsuna-can-se Feb 8, 2024
e0550b7
不要なusingを削除
tsuna-can-se Feb 8, 2024
d1006e7
.gitignoreに*.lutconfigを追加
tsuna-can-se Feb 8, 2024
514e7fb
IDE0039をテストコードでは無視するよう設定
tsuna-can-se Feb 8, 2024
7e021bc
テストメソッドの名前でテスト仕様を表現するように修正
tsuna-can-se Feb 8, 2024
001e285
Arrangeの漏れを修正
tsuna-can-se Feb 8, 2024
769b1e0
型の誤りを修正
tsuna-can-se Feb 8, 2024
a59d92f
単一要素のコレクションの検証にAssert.Singleを使うよう修正
tsuna-can-se Feb 8, 2024
407840d
配列の初期化処理で短縮構文を利用するよう修正
tsuna-can-se Feb 8, 2024
9e36511
単一要素のコレクションの検証にAssert.Singleを利用するよう修正
tsuna-can-se Feb 8, 2024
0e76ae0
配列の初期化処理で短縮構文を利用するように修正
tsuna-can-se Feb 8, 2024
c4cdfa6
コンストラクターの呼び出しで短縮構文を利用するように修正
tsuna-can-se Feb 8, 2024
25d9ac9
MemberDataのデータソースにTheoryDataを利用するよう修正
tsuna-can-se Feb 8, 2024
9f7a3be
プライマリーコンストラクターを利用するように修正
tsuna-can-se Feb 8, 2024
de21d38
テストコードでのSA1602の警告を無効化
tsuna-can-se Feb 8, 2024
b0b24a5
プライマリーコンストラクターを利用するように修正
tsuna-can-se Feb 8, 2024
45fe187
リストの初期化処理で短縮構文を利用するように修正
tsuna-can-se Feb 8, 2024
386fed9
不要なコンストラクターを削除
tsuna-can-se Feb 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions samples/ConsoleAppWithDI/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*.user
*.userosscache
*.sln.docstates
*.lutconfig

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
Expand Down
2 changes: 2 additions & 0 deletions samples/ConsoleAppWithDI/solution/tests/.editorconfig
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[*.cs]
# Wrapping preferences
dotnet_diagnostic.IDE0039.severity=none
dotnet_diagnostic.SA0001.severity=none
dotnet_diagnostic.SA1123.severity=none
dotnet_diagnostic.SA1600.severity=none
dotnet_diagnostic.SA1602.severity=none
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,11 @@

namespace Maris.ConsoleApp.IntegrationTests.ScopeTests.Commands;

internal class Command : SyncCommand<Parameter>
internal class Command(TestObject1 obj1, TestObject2 obj2) : SyncCommand<Parameter>
{
internal const string CommandName = "scope-test";
private readonly TestObject1 obj1;
private readonly TestObject2 obj2;

public Command(TestObject1 obj1, TestObject2 obj2)
{
this.obj1 = obj1;
this.obj2 = obj2;
}
private readonly TestObject1 obj1 = obj1;
private readonly TestObject2 obj2 = obj2;

protected override ICommandResult Execute(Parameter parameter)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

internal static class ObjectStateHistory
{
private static readonly List<ObjectState> HistoryStore = new();
private static readonly List<ObjectState> HistoryStore = [];

internal static IReadOnlyCollection<ObjectState> Histories => HistoryStore.AsReadOnly();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
using Maris.ConsoleApp.Hosting;
using Maris.ConsoleApp.IntegrationTests.ScopeTests.Commands;
using Maris.Logging.Testing.Xunit;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit.Abstractions;

namespace Maris.ConsoleApp.IntegrationTests.ScopeTests;

[Collection(nameof(ScopeTests))]
public class ScopedTest
public class ScopedTest(ITestOutputHelper testOutputHelper) : TestBase(testOutputHelper)
{
private readonly TestLoggerManager loggerManager;

public ScopedTest(ITestOutputHelper testOutputHelper)
=> this.loggerManager = new TestLoggerManager(testOutputHelper);

[Fact]
public async Task Scopedで登録したインスタンスはコマンド実行時に1回だけ初期化される()
{
Expand Down Expand Up @@ -127,7 +121,7 @@ private IHost CreateHost()
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureServices((context, services) =>
{
services.AddTestLogging(this.loggerManager);
services.AddTestLogging(this.LoggerManager);
services.AddScoped<TestObject1>(); // Command 内で利用
services.AddScoped<TestObject2>(); // Command, TestObject1 内で利用
services.AddConsoleAppService(args);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
using Maris.ConsoleApp.Hosting;
using Maris.ConsoleApp.IntegrationTests.ScopeTests.Commands;
using Maris.Logging.Testing.Xunit;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit.Abstractions;

namespace Maris.ConsoleApp.IntegrationTests.ScopeTests;

[Collection(nameof(ScopeTests))]
public class SingletonTest
public class SingletonTest(ITestOutputHelper testOutputHelper) : TestBase(testOutputHelper)
{
private readonly TestLoggerManager loggerManager;

public SingletonTest(ITestOutputHelper testOutputHelper)
=> this.loggerManager = new TestLoggerManager(testOutputHelper);

[Fact]
public async Task Singletonで登録したインスタンスはコマンド実行時に1回だけ初期化される()
{
Expand Down Expand Up @@ -127,7 +121,7 @@ private IHost CreateHost()
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureServices((context, services) =>
{
services.AddTestLogging(this.loggerManager);
services.AddTestLogging(this.LoggerManager);
services.AddSingleton<TestObject1>(); // Command 内で利用
services.AddSingleton<TestObject2>(); // Command, TestObject1 内で利用
services.AddConsoleAppService(args);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
namespace Maris.ConsoleApp.IntegrationTests.ScopeTests;

internal class TestObject1 : TestObjectBase
internal class TestObject1(TestObject2 obj2) : TestObjectBase
{
private readonly TestObject2 obj2;

public TestObject1(TestObject2 obj2) => this.obj2 = obj2;
private readonly TestObject2 obj2 = obj2;

internal void DoSomething()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,5 @@

internal class TestObject2 : TestObjectBase
{
public TestObject2()
{
}

internal void DoSomething() => this.LogHistory();
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
using Maris.ConsoleApp.Hosting;
using Maris.ConsoleApp.IntegrationTests.ScopeTests.Commands;
using Maris.Logging.Testing.Xunit;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit.Abstractions;

namespace Maris.ConsoleApp.IntegrationTests.ScopeTests;

[Collection(nameof(ScopeTests))]
public class TransientTest
public class TransientTest(ITestOutputHelper testOutputHelper) : TestBase(testOutputHelper)
{
private readonly TestLoggerManager loggerManager;

public TransientTest(ITestOutputHelper testOutputHelper)
=> this.loggerManager = new TestLoggerManager(testOutputHelper);

[Fact]
public async Task Transientで登録したインスタンスはインジェクション時に毎回初期化される()
{
Expand Down Expand Up @@ -130,7 +124,7 @@ private IHost CreateHost()
var builder = Host.CreateDefaultBuilder(args);
builder.ConfigureServices((context, services) =>
{
services.AddTestLogging(this.loggerManager);
services.AddTestLogging(this.LoggerManager);
services.AddTransient<TestObject1>(); // Command 内で利用
services.AddTransient<TestObject2>(); // Command, TestObject1 内で利用
services.AddConsoleAppService(args);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Maris.Logging.Testing.Xunit;
using Xunit.Abstractions;

namespace Maris.ConsoleApp.IntegrationTests;

public class TestBase
{
protected TestBase(ITestOutputHelper testOutputHelper)
{
ArgumentNullException.ThrowIfNull(testOutputHelper);
this.LoggerManager = new TestLoggerManager(testOutputHelper);
}

protected TestLoggerManager LoggerManager { get; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public void Parameter_ConsoleAppContextに設定したパラメーターを取
}

[Fact]
public void ValidateAllParameterを呼び出すとValidateParameterメソッドが指定したパラメーターを伴って呼び出される()
public void ValidateAllParameter_ValidateParameterメソッドがコンテキストに指定したパラメーターを伴って1回呼び出される()
{
// Arrange
var parameter = new CommandParameter();
Expand All @@ -44,7 +44,7 @@ public void ValidateAllParameterを呼び出すとValidateParameterメソッド
}

[Fact]
public void IAsyncCommandのExecuteAsyncを呼び出すとExecuteAsyncメソッドが指定したパラメーターとキャンセルトークンを伴って呼び出される()
public void IAsyncCommandのExecuteAsync_ExecuteAsyncメソッドがコンテキストに指定したパラメーターとキャンセルトークンを伴って1回呼び出される()
{
// Arrange
var parameter = new CommandParameter();
Expand All @@ -64,10 +64,10 @@ public void IAsyncCommandのExecuteAsyncを呼び出すとExecuteAsyncメソッ
}

[Fact]
public void パラメーターの型にインターフェースを使用できる()
public void Initialize_パラメーターの型にインターフェースを使用できる()
{
// Arrange
var parameter = new ParameterWithInterface();
IParameter parameter = new ParameterWithInterface();
var commandAttribute = new CommandAttribute("dummy-command", typeof(CommandWithInterface));
var context = new ConsoleAppContext(commandAttribute, parameter);
var commandMock = new Mock<CommandWithInterface>();
Expand All @@ -78,7 +78,7 @@ public void パラメーターの型にインターフェースを使用でき
}

[Fact]
public void パラメーターの型とコンテキストのパラメーター型が一致しない場合は例外()
public void Initialize_パラメーターの型とコンテキストのパラメーター型が一致しない_InvalidOperationExceptionが発生する()
{
// Arrange
var parameter = new ParameterWithInterface();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Maris.ConsoleApp.UnitTests.Core;
public class CommandAttributeTest
{
[Fact]
public void Constructor_コマンドの型がnullの場合は例外()
public void Constructor_コマンドの型がnull_ArgumentNullExceptionが発生する()
{
// Arrange
string name = "command";
Expand All @@ -19,7 +19,7 @@ public void Constructor_コマンドの型がnullの場合は例外()
}

[Fact]
public void Constructor_コマンドの型がコマンドの定義を満たしていない場合は例外()
public void Constructor_コマンドの型がコマンドの定義を満たしていない_ArgumentExceptionが発生する()
{
// Arrange
string name = "command";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public void CommandName_初期化時に指定したコマンド名を取得で
}

[Fact]
public void Context_初期値のまま取得すると例外()
public void Context_初期値のまま取得する_InvalidOperationExceptionが発生する()
{
// Arrange
var command = new CommandImpl();
Expand Down Expand Up @@ -68,7 +68,7 @@ public void Context_初期化時に指定したコンテキストを取得でき
}

[Fact]
public void Initialize_nullで初期化すると例外()
public void Initialize_nullで初期化する_ArgumentNullExceptionが発生する()
{
// Arrange
var command = new CommandImpl();
Expand All @@ -82,27 +82,29 @@ public void Initialize_nullで初期化すると例外()
}

[Fact]
public void ValidateAllParameter_入力パラメータのクラスにプロパティが定義されていない()
public void ValidateAllParameter_入力パラメータのクラスにプロパティが定義されていない_例外が発生しない()
{
// Arrange
var command = new CommandImpl();
string commandName = "dummy-command";
var commandAttribute = new CommandAttribute(commandName, typeof(CommandImpl));
var context = new ConsoleAppContext(commandAttribute, new object());
var parameter = new object();
var context = new ConsoleAppContext(commandAttribute, parameter);
command.Initialize(context);

// Act and Assert(例外が発生しないこと)
command.ValidateAllParameter();
}

[Fact]
public void ValidateAllParameter_入力パラメータのクラスにプロパティがあるが検証属性が定義されていない()
public void ValidateAllParameter_入力パラメータのクラスにプロパティがあるが検証属性が定義されていない_例外が発生しない()
{
// Arrange
var command = new CommandImpl();
string commandName = "dummy-command";
var commandAttribute = new CommandAttribute(commandName, typeof(CommandImpl));
var context = new ConsoleAppContext(commandAttribute, new NoDataAnnotationParameter());
var parameter = new NoDataAnnotationParameter();
var context = new ConsoleAppContext(commandAttribute, parameter);
command.Initialize(context);

// Act and Assert(例外が発生しないこと)
Expand All @@ -112,7 +114,7 @@ public void ValidateAllParameter_入力パラメータのクラスにプロパ
[Theory]
[InlineData("", 0)]
[InlineData("1234567890", 5)]
public void ValidateAllParameter_入力パラメータのクラスに検証属性を定義したプロパティがあり検証に成功する値が設定されている(string param1, int param2)
public void ValidateAllParameter_入力パラメータのクラスに検証属性を定義したプロパティがあり検証に成功する値が設定されている_例外が発生しない(string param1, int param2)
{
// Arrange
var command = new CommandImpl();
Expand All @@ -131,7 +133,7 @@ public void ValidateAllParameter_入力パラメータのクラスに検証属
}

[Fact]
public void ValidateAllParameter_入力パラメータのクラスに検証属性を定義したプロパティがあり一部検証に失敗する値が設定されている()
public void ValidateAllParameter_入力パラメータのクラスに検証属性を定義したプロパティがあり一部検証に失敗する値が設定されている_検証失敗メッセージを伴うInvalidParameterExceptionが発生する()
{
// Arrange
var command = new CommandImpl();
Expand All @@ -153,13 +155,11 @@ public void ValidateAllParameter_入力パラメータのクラスに検証属

// Assert
var ex = Assert.Throws<InvalidParameterException>(action);
Assert.Collection(
ex.ValidationResults,
result => Assert.Equal("Param2 は 0 から 5 の間で設定してください。", result.ErrorMessage));
Assert.Single(ex.ValidationResults, result => result.ErrorMessage == "Param2 は 0 から 5 の間で設定してください。");
}

[Fact]
public void ValidateAllParameter_入力パラメータのクラスに検証属性を定義したプロパティがあり複数検証に失敗する値が設定されている()
public void ValidateAllParameter_入力パラメータのクラスに検証属性を定義したプロパティがあり複数検証に失敗する値が設定されている_検証失敗メッセージを伴うInvalidParameterExceptionが発生する()
{
// Arrange
var command = new CommandImpl();
Expand Down Expand Up @@ -188,7 +188,7 @@ public void ValidateAllParameter_入力パラメータのクラスに検証属
}

[Fact]
public void ValidateAllParameter_コマンドクラスのロジック内でパラメーターの入力値検証エラーがあった()
public void ValidateAllParameter_コマンドクラスのロジック内でパラメーターの入力値検証エラーがあった_InvalidParameterExceptionが発生する()
{
// Arrange
var command = new ValidationErrorCommand();
Expand Down
Loading