以下の内容はhttps://rksoftware.hatenablog.com/entry/2025/03/11/220000より取得しました。


Pleasanter のテストの準備 テスト対象の数を調べる

Pleasanter で遊ぼう! ということで Pleasanter にテストを書いていきたいと思います。

まずは全容をつかむために、テスト対象候補のクラス、メソッド、プロパティの数を探ってみましょう。

■ 結果

Implem.MySql             , classes:   1, methods:    16, properties:      6
Implem.PostgreSql        , classes:   1, methods:    16, properties:      6
Implem.SqlServer         , classes:   1, methods:    16, properties:      6
Implem.CodeDefiner       , classes:   3, methods:    27, properties:      6
Implem.DefinitionAccessor, classes:  24, methods:   171, properties:     12
Implem.DisplayAccessor   , classes:   3, methods:    13, properties:      0
Implem.Factory           , classes:   1, methods:     5, properties:      0
Implem.Libraries         , classes:  70, methods:  1161, properties:     91
Implem.ParameterAccessor , classes:  72, methods:   553, properties:    118
Implem.Pleasanter        , classes: 590, methods: 54554, properties:  12651
Implem.Plugins           , classes:   1, methods:     6, properties:      2
implem.TestAutomation    , classes:   6, methods:   102, properties:     16

■ 調べ方

簡単に言うと、リフレクションで Public クラスを取ってきて数えています。

■ テストソリューションの作り方

Pleasanter は一つのリポジトリで構成されています。テストを追加するにあたってそのリポジトリを崩したくありません。そこで、通常は一つのソリューションにプロダクトとテストを含めるスタイルも多いところですが、今回は敢えて、テストプロジェクトをリポジトリを分けることを試みていきます。

テストソリューションを作って別のソリューションのプロジェクトを追加する


追加したプロジェクトをテストソリューションのプロジェクトで参照に追加する



追加されています。

対象プロジェクトを追加した結果

このようにプロジェクトを参照に追加した場合、その参照されているプロジェクトが参照しているものも見えるようになります。
しかし、Pleasanter のソリューションでは、メインのプロダクトのプロジェクトから参照されないプロジェクトがあるのでそれも追加していきます。
そうしてこうなりました。
CollectTestablesPleasanterTest は今回作ったプロジェクトです。

テスト対象を考える

Pleasanter のプロダクトのプロジェクトのコードはサンプリングしてみると基本 public のようです。というわけで今回は public クラスをテスト対象として数える方針とします。

■ 数えるコード

using System.Reflection;

Count(typeof(Implem.MySql.MySqlObjectFactory));
Count(typeof(Implem.PostgreSql.PostgreSqlObjectFactory));
Count(typeof(Implem.SqlServer.SqlServerObjectFactory));
Count(typeof(Implem.CodeDefiner.Starter));
Count(typeof(Implem.DefinitionAccessor.CodeColumn2nd));
Count(typeof(Implem.DisplayAccessor.Display));
Count(typeof(Implem.Factory.RdsFactory));
Count(typeof(Implem.Libraries.Classes.Csv));
Count(typeof(Implem.ParameterAccessor.Parts.ActionTypes));
Count(typeof(Implem.Pleasanter.Controllers.AdminsController));
Count(typeof(Implem.Plugins.IPdfPlugin));
Count(typeof(Implem.TestAutomation.Parts.AutoTestLog));

static void Count(Type type)
{
    var asm = Assembly.GetAssembly(type)!;
    var types = asm.GetTypes().Where(x => x.IsClass && x.IsPublic).ToArray();
    Console.WriteLine($"{asm.FullName?.Split(',')[0],-25}, classes: {types.Length,3}, methods: {types.Select(x => x.GetMethods().Length).Sum(),5}, properties: {types.Select(x => x.GetProperties().Length).Sum(),6}");
}

github.com

■ 結果

Implem.MySql             , classes:   1, methods:    16, properties:      6
Implem.PostgreSql        , classes:   1, methods:    16, properties:      6
Implem.SqlServer         , classes:   1, methods:    16, properties:      6
Implem.CodeDefiner       , classes:   3, methods:    27, properties:      6
Implem.DefinitionAccessor, classes:  24, methods:   171, properties:     12
Implem.DisplayAccessor   , classes:   3, methods:    13, properties:      0
Implem.Factory           , classes:   1, methods:     5, properties:      0
Implem.Libraries         , classes:  70, methods:  1161, properties:     91
Implem.ParameterAccessor , classes:  72, methods:   553, properties:    118
Implem.Pleasanter        , classes: 590, methods: 54554, properties:  12651
Implem.Plugins           , classes:   1, methods:     6, properties:      2
implem.TestAutomation    , classes:   6, methods:   102, properties:     16

かなりの数。やりがいがありそうですね。

ちなみにやたらと数の少ないプロジェクトがありますね。これは......

プロジェクトによっては internal ばかりのプロジェクトもあるようですね。
まあ、public だけでも十分な数があるので、これから public クラスを狙ってテストを書いていってみましょう。

■ いかがでしたか?

今回はここまで。




以上の内容はhttps://rksoftware.hatenablog.com/entry/2025/03/11/220000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14