我有一个使用.Net 4.0,VS 2010和Spring 1.3的项目。在我的每个Integration测试运行之前和之后,我希望能够为测试设置和清理一些数据。我正在考虑使用自定义属性来执行此操作。
[TestClass]
public class UnitTest1
{
[TestMethod]
[PreTestSqlExecute(SqlScript="SetUpDataForMethod1.sql")]
public virtual void TestMethod1()
{
.
为此,我创建了自定义属性和Around Method Interceptor
public class PreTestSqlExecuteAdvice : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
.
基本上,现在的问题是如何让Microsoft的Test框架使用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 :(得分:0)
找到我自己的解决方案,详见此处 - http://www.chaitanyaonline.net/2011/09/25/improving-integration-tests-in-net-by-using-attributes-to-execute-sql-scripts/
基本上我从“ContextBoundObjects”继承了我的单元测试,这让我可以注入自己的代码并做类似AOP的东西。我创建了自己的自定义属性,以便我可以运行预处理和后处理Sql脚本。