[seasar-dotnet:1262] Re: MbUnitでのRowTestの利用

Ryo Miyagi [E-MAIL ADDRESS DELETED]
2009年 2月 12日 (木) 20:41:25 JST


工藤さん

宮城です。

ご報告ありがとうございます。
週末に確認したいともいます。


2009/02/12 8:14 Kudoh Satoshi <[E-MAIL ADDRESS DELETED]>:
> 工藤と申します。いつもお世話になっております。
>
> 非常に限定的な環境でのことなのであまり参考にならないと思うのですが、
> 情報提供ということで投稿します。
>
> ・.NET Framework 1.1
> ・S2Container.NET 1.2.9
> ・MbUnit 2.41
>
> S2Unit.NET + MbUnitの環境で [Row], [RowTest] を使おうとしたのですが、
> Null参照の例外が発生します。
>
> 調べた結果、以下のことが判明しました。
>
> -----
> Seasar.Framework.Unit/S2FrameworkTestCaseRunner の Run() メソッドで落ちる。
>
>  public virtual object Run(IRunInvoker invoker, object o, IList args)
>
> このメソッドでは invoker.Name を使ってテストメソッドを取得している。
> RowAttribute を指定したメソッドの場合は、invoker.Name には引数も含めた
> メソッド名が入っている。
>
>  [Test][S2]
>  public void test() {...}     ----> invoker.Name == "test"
>
>  [Row(1)][RowTest][S2]
>  public void test(int a) {...} ---> invoker.Name == "test(int)"
>
> 本来であれば "test" を取得すべきところ、"test(int)" を取得しようとする。
> このため、メソッドの取得に失敗しNull参照が発生する。
>
> -----
>
> ということで、invoker.Name からメソッド名のみを取り出すようにすれば、
> 問題は回避できます。
>
> s2container.net/source/Seasar.Unit/Seasar.Framework.Unit/
> S2FrameworkTestCaseRunner.cs
>
> ***************
> *** 43,53 ****
>                {
>                        get { return container; }
>                }
>
>                public virtual object Run(IRunInvoker invoker, object o, IList args)
>                {
>                        fixture = o as S2FrameworkTestCaseBase;
> !                       method = fixture.GetType().GetMethod(invoker.Name);
>                        SetUpContainer();
>                        fixture.Container = container;
>                        try
> --- 43,58 ----
>                {
>                        get { return container; }
>                }
> +               private string getMethodName(string name)
> +               {
> +                       if (name.IndexOf("(") == -1) return name;
>
> +                       return name.Substring(0, name.IndexOf("("));
> +               }
>                public virtual object Run(IRunInvoker invoker, object o, IList args)
>                {
>                        fixture = o as S2FrameworkTestCaseBase;
> !                       method = fixture.GetType().GetMethod(getMethodName(invoker.Name));
>                        SetUpContainer();
>                        fixture.Container = container;
>                        try
>
> ----
>
> 以上
> _______________________________________________
> 工藤聡
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



-- 
Ryo Miyagi


seasar-dotnet メーリングリストの案内