2011-02-13 4 views
1

.NET 4.0、VS 2010、Spring 1.3を使用したプロジェクトがあります。私のインテグレーションテストの実行前後で、テスト用のデータをセットアップしてクリーンアップしたいと思っています。私はこれを行うカスタム属性を使用することを考えていた。Spring.Netを使用してテストクラスを作成するためのMicrosoftテストフレームワークの取得

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    [PreTestSqlExecute(SqlScript="SetUpDataForMethod1.sql")] 
    public virtual void TestMethod1() 
    { 
    . 

これを行うために、私は、カスタム属性とメソッドの周りにインターセプタを作成している

public class PreTestSqlExecuteAdvice : IMethodInterceptor 
{ 
    public object Invoke(IMethodInvocation invocation) 
    { 
    . 

基本的に、問題は今作成に春を使用するには、Microsoftでのテストフレームワークを取得する方法です」コンクリートクラスを直接作成するのではなく、「UnitTest1」クラスを作成します。たとえば、私はこのような何かを行うための適切な設定を持つダミーコンソールアプリケーションを使用することができます

static void Main(string[] args) 
    { 
     IApplicationContext ctx = ContextRegistry.GetContext(); 
     var ut = (UnitTest1)ctx["mySqlTest"]; 
     ut.TestMethod1(); 

これは問題なく動作します。しかし、私がビジュアルスタジオを使ってテストを直接実行し、例えば「ソリューション内のすべてのテストを実行」をクリックすると、インターセプタを呼び出さずに前後のコードを実行するだけでテストメソッドに直接移動します。

クラスAbstractDependencyInjectionSpringContextTests

public class UnitTest1 : AbstractDependencyInjectionSpringContextTests 

しかし、どれから

[TestClass] 
[ClassInstance] 
public class UnitTest1 
{ 

や継承に適切な属性で

<object type="Spring.Aop.Framework.AutoProxy.AttributeAutoProxyCreator, Spring.Aop"> 
    <property name="AttributeTypes" value="SpringTests.ClassInstanceAttribute"/> 
    <!-- Interceptor names can be either of the type IAdvice, IAdvisor, or IAdvisors --> 
    <property name="InterceptorNames" value="aroundAdvisor"/> 
</object> 

以下のように私は、configにAttributeAutoProxyCreatorを使用してみましたが

これらの機能は動作するようです。メソッドのインターセプタが呼び出されていません。 Visual StudioでMicrosoftのテストフレームワークを取得して、Springクラスを使用してテストクラスを作成するにはどうすればよいですか。代わりに、Springにこれらのテストクラスの具体的な構造を代行受信させ、代わりにProxyクラスを注入してください。

ご協力いただきありがとうございます。ここで説明するよう、私自身の解決策を見つけた

+0

私はこの目的のためにビルドイン属性[TestInitialize]と[TestCleanup]を使用できると思います。 [msdn](http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.testinitializeattribute(v = VS.100).aspx)のドキュメントを参照してください。なぜそれらを使用していないのか説明できますか? – Marijn

+0

同じメソッドを実行し、引数を取らないためです。私はそれぞれの方法の前に異なるSQLスクリプトを実行したい。それぞれのメソッドは、必要なデータを設定してクリーンアップします。 – Chaitanya

+0

この質問は関連しているようですが、それは[mstestのdi containerを使って](http://stackoverflow.com/questions/4269142/mstest-testmethod-dependency-injection)です。 mstestがテストインスタンスを作成する方法を簡単に突き止める方法はないようです。 – Marijn

答えて

関連する問題