我有一个项目使用.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类。
在此先感谢您的帮助。
我觉得你可以使用内建属性[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