Asp.net 如何从不同解决方案文件中的测试方法访问表单中的方法?

Asp.net 如何从不同解决方案文件中的测试方法访问表单中的方法?,asp.net,vb.net,unit-testing,nunit,windows-forms-designer,Asp.net,Vb.net,Unit Testing,Nunit,Windows Forms Designer,我在两个单独的解决方案文件中有两个不同的项目。一个是包含我的单元测试方法的测试项目,另一个是主项目。我知道我需要先创建一个单独GUI表单的实例,以便访问中的方法,但不确定如何做到这一点 另外,我有一些变量值,只有在运行整个原始应用程序时才会启动这些变量值。这些值用于主项目中的许多方法中。没有它们,我只会得到空值,测试方法就会失败。有没有办法在不运行应用程序的情况下获取这些变量的值?我试图将获取这些变量值的逻辑放在我的测试方法中,然后调用实际的方法,但这仍然不起作用。如何解决此问题?对于编写的应用

我在两个单独的解决方案文件中有两个不同的项目。一个是包含我的单元测试方法的测试项目,另一个是主项目。我知道我需要先创建一个单独GUI表单的实例,以便访问中的方法,但不确定如何做到这一点


另外,我有一些变量值,只有在运行整个原始应用程序时才会启动这些变量值。这些值用于主项目中的许多方法中。没有它们,我只会得到空值,测试方法就会失败。有没有办法在不运行应用程序的情况下获取这些变量的值?我试图将获取这些变量值的逻辑放在我的测试方法中,然后调用实际的方法,但这仍然不起作用。如何解决此问题?

对于编写的应用程序,如果在可测试性方面写得不好,那么您在尝试编写单元测试时遇到的问题非常常见

通常,为其编写测试的代码并不驻留在表单或UI类中。 业务逻辑应该位于主项目中的独立类中。然后可以从UI和单元测试调用业务逻辑

因此,您必须首先将任何业务逻辑移动到单独的类中

接下来需要做的事情是删除新创建的类与其他类之间的依赖关系,这些依赖关系会阻止您编写单元测试,并用接口替换这些依赖关系

例如,您可以更改您的应用程序,以便您在问题中提到的每个环境变量都由特殊类检索。 如果您为这些类创建接口,您可以在单元测试中设置一个所谓的
Mock
(真实类的假版本),您可以在测试中配置该接口,使其按照特定测试场景的要求运行


一些一般建议:

  • 重构要测试的代码(即使其更好地可测试)通常比编写单元测试本身花费更多的时间。有很多关于重构所谓“遗留”代码的书

  • 为可测试性重构应用程序通常意味着消除具体类之间的依赖关系,转而使用接口。在生产代码中,您为接口传递生产类,在单元测试中,您可以创建一个“mock”类,该类实现相同的接口,但其行为方式与测试中所需的方式类似

  • >P>编写单元测试时,可以考虑使用类似于 MOQ 的模拟框架。它将为您节省大量时间,并使测试代码更小。您可以在这里找到介绍:

  • 理想情况下,您应该从一开始就以考虑可测试性的方式设计应用程序。“TDD”(TDD)方法甚至更进一步,在这里,您在编写实际代码之前编写测试,但根据我的经验,这种方法并不经常使用