2011-02-13 52 views
1

我有一个项目使用.Net 4.0,VS 2010和Spring 1.3。在运行每个集成测试之前和之后,我希望能够设置和清理一些测试数据。我正在考虑使用自定义属性来做到这一点。获取微软测试框架使用Spring.Net创建测试类

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

要做到这一点,我创建了自定义属性和周围方法拦截

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

基本上,现在的问题是如何让微软测试框架使用Spring创建“ UnitTest1“类而不是直接创建具体类。例如,我可以使用具有适当配置的虚拟控制台应用来执行此类操作

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

这可以正常工作。但是,当我直接使用Visual Studio运行测试并单击“在解决方案中运行所有测试”时,它不调用拦截器并执行代码之前和之后,直接进入测试方法。

我已经使用在配置AttributeAutoProxyCreator试图如下所示

<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> 

与适当的属性的类

[TestClass] 
[ClassInstance] 
public class UnitTest1 
{ 

或沿用AbstractDependencyInjectionSpringContextTests类

public class UnitTest1 : AbstractDependencyInjectionSpringContextTests 

但没有这些似乎工作。我的方法拦截器没有被调用。那么如何让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 2011-02-13 08:45:23

回答