[seasar-dotnet:1495] Re: PartCover Nunit S2Container.netでカバレッジが取得できない(例外が発生する)
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2009年 9月 28日 (月) 14:46:26 JST
菊池です
#個人宛に送ってしまったので再送
アセンブリの参照解決で問題が発生しているように見えますね。
http://msdn.microsoft.com/ja-jp/library/e74a18c4(VS.80).aspx
fuslogvw.exe
でのアセンブリバインディングで実際の参照関係とエラーの詳細の確認と
http://msdn.microsoft.com/ja-jp/library/yx7xezcf(VS.80).aspx
ランタイムがアセンブリを検索する方法
と
http://msdn.microsoft.com/ja-jp/library/efs781xb(VS.80).aspx
<codeBase> 要素
を参照して参照解決に失敗したアセンブリを app.config で明示的にcodeBase指定し
てみてください。
(またはアセンブリのある場所を pobing対象にしてください)
関連チェックポイント
・GAC前提となっているアセンブリが正しくGAC登録されているか
・コンパイル時と実行時でバージョンの異なるアセンブリを利用していないか
この辺も確認してみてください。
2009/09/26 8:10 早川貴彦 <[E-MAIL ADDRESS DELETED]>:
> いつもお世話になっております。早川と申します。
> 件名の件で困っておりまして、何らかの回避方法を、
> または、カバレッジ取得に皆様はどんなツール(フリー・商用)を使用されているか
> 教えていただければと思いメールしました。
> [現象]
> PartCoverからNunitを起動してテスト内容のカバレッジを取得しようとすると、
> Seasarの初期化処理にてエラーが発生してしまう。
> [前提]
> 1 コンソールアプリ(以下アプリ) OK
> 2 Nunit→テストdll→アプリ OK
> 3 PartCover→アプリ OK
> 4 PartCover→Nunit→テストdll→アプリ 例外発生
> 補足:4のテストdllにてSeasarの初期化処理を行わないテストの場合は
> エラーは発生しない
> [例外]
> Nunitのコンソールに出力された例外情報は以下の通りです。
> (但しパス内のOSログインユーザ名のみ編集)
> JScriptUtilにて、Tempディレクトリにdllを探しに行ってしまい、
> エラーが発生しています。
> (ここで探しているdllは、実行毎に毎回名称が変わる
> →JScript.netによりdicon記述内容を評価するために使用しているもののようだ)
> Seasar.WindowsExample.Tests.TestClass1.testMethod:
> System.TypeInitializationException :
> 'Seasar.Framework.Util.JScriptUtil' のタイプ初期化子が例外をスローしまし
> た。
> ----> System.IO.FileNotFoundException : ファイルまたはアセンブリ
> 'file:///C:\Documents and Settings\ユーザ名\Local
> Settings\Temp\c_1pjiaw.dll'、
> またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つ
> かりません。
> 場所 Seasar.Framework.Util.JScriptUtil.Evaluate(String exp, Object root)
> 場所 Seasar.Framework.Container.Impl.ArgDefImpl.get_Value()
> 場所
> Seasar.Framework.Container.Assembler.AbstractPropertyAssembler.GetValue(IPropertyDef
> propertyDef, Object component)
> 場所
> Seasar.Framework.Container.Assembler.AutoPropertyAssembler.Assemble(Object
> component)
> 場所
> Seasar.Framework.Container.Deployer.SingletonComponentDeployer.Assemble()
> 場所
> Seasar.Framework.Container.Deployer.SingletonComponentDeployer.Deploy(Type
> receiveType)
> 場所 Seasar.Framework.Container.Deployer.SingletonComponentDeployer.Init()
> 場所 Seasar.Framework.Container.Impl.ComponentDefImpl.Init()
> 場所 Seasar.Framework.Container.Impl.S2ContainerImpl.Init()
> 場所 Seasar.Framework.Container.Impl.S2ContainerImpl.Init()
> 場所 Seasar.Framework.Container.Factory.SingletonS2ContainerFactory.Init()
> 場所 Seasar.WindowsExample.Tests.TestClass1.Setup() 場所 C:\Documents and
> Settings\ユーザ名\My Documents\Visual Studio
> 2008\Projects\sample\S2WindowsExample.Tests\TestClass1.cs:行 29
> --FileNotFoundException
> 場所 System.Reflection.Assembly._nLoad(AssemblyName fileName, String
> codeBase, Evidence assemblySecurity, Assembly locationHint,
> StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean
> forIntrospection)
> 場所 System.Reflection.Assembly.nLoad(AssemblyName fileName, String
> codeBase, Evidence assemblySecurity, Assembly locationHint,
> StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean
> forIntrospection)
> 場所 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,
> Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean
> forIntrospection)
> 場所 System.Reflection.Assembly.Load(AssemblyName assemblyRef, Evidence
> assemblySecurity)
> 場所 System.CodeDom.Compiler.CompilerResults.get_CompiledAssembly()
> 場所 Seasar.Framework.Util.JScriptUtil..cctor()
> [使用Framework]
> S2Container.net 1.3.9 (再現方法ではこのバージョンを用いましたが、1.3.14で
> も同様でした)
> S2Dao.net 1.3.9
> Nunit 2.5.1.9189
> PartCover 2.3.0.35109
> [再現方法]
> 1 http://s2container.net.seasar.org/download/windowsformsample-1.3.9.zip
> のS2WindowsExample.Testsプロジェクトに、参照設定でNunit.framework.dllを追
> 加
> 2 上記プロジェクトに下記テストクラスを追加
> 3 http://blog.goo.ne.jp/wildriver_1977/e/f6a608cb164b4355bd55423410b20ec7
> を参考にしてPartCoverからNunitを実行し、テストアプリを実行
> 2のテストクラス
> using System;
> using System.Collections.Generic;
> using System.Text;
> using NUnit.Framework;
> using System.IO;
> using log4net.Util;
> using System.Reflection;
> using log4net;
> using log4net.Config;
> using Seasar.Framework.Container.Factory;
> namespace Seasar.WindowsExample.Tests
> {
> [TestFixture]
> public class TestClass1
> {
> [SetUp]
> public void Setup()
> {
> FileInfo info = new FileInfo(string.Format("{0}.dll.config",
> SystemInfo.AssemblyShortName(Assembly.GetExecutingAssembly())));
> XmlConfigurator.Configure(LogManager.GetRepository(), info);
> SingletonS2ContainerFactory.ConfigPath = "ExampleLogics.dicon";
> SingletonS2ContainerFactory.Init();
> }
> [Test]
> public void testMethod()
> {
> //Seasarの初期化処理でエラーが発生しなかったかどうかを確認するためだけのテ
> スト
> Assert.IsTrue(true);
> }
> [TearDown]
> public void TearDown()
> {
> SingletonS2ContainerFactory.Destroy();
> }
> }
> }
> [疑問点]
> Seasar.Framework.Util.JScriptUtilではparameters.GenerateInMemory = true;
> となっており、正常動作するパターンの場合にはメモリ上にdllが作成されている
> ようだが
> PartCover→Nunit→テストdllの場合には例外記載のパスを探しに行ってしまう点
> (exe →exe →dllの場合?それとも他に何か条件がある?)
> [試行内容]
> ・PartCover/Nunitはそれぞれコンソールアプリ、GUIアプリがあり、
> それぞれの組み合わせ(4通り)を試しても同様の現象
> ・nunitの設定にて
> /domain None,Single,Multiple 3通り
> /process Single,Separate,Multiple 3通り
> /noshadow 2通り
> /nothread 2通り
> の組み合わせを試してみても問題の解決には繋がらず
> ・PartCover側には上記のような動作に影響のあるようなオプションは無い
> →こちらで/noshadowのようなオプション動作が必要なのでは?と
> 想像しつつも不明
> 以上です
> どうぞよろしくお願いします
> --
> 早川貴彦
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20090928/0fd3c634/attachment.html>
seasar-dotnet メーリングリストの案内