0

首先是一个演示项目的链接,该项目展示了手头的问题:

https://github.com/dsidirop/MTestStructureMapIssue.git

简而言之,当测试从 Visual Studio 中运行时,一切都很好。如果我们尝试使用 MTest.exe 运行相同的测试,如下所示:

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MsTest.exe"    /nologo  "/testcontainer:MTestStructureMapIssue.Tests.dll"

然后我们在测试类“DummyTest”的构造函数中得到以下错误:

 StructureMap.StructureMapConfigurationException: No default Instance is registered and cannot be automatically determined for type 'MTestStructureMapIssue.Dummy.Contracts.ISomeDbContext'

 There is no configuration specified for MTestStructureMapIssue.Dummy.Contracts.ISomeDbContext

 1.) Container.GetInstance<MTestStructureMapIssue.Dummy.Contracts.ISomeDbContext>()

    at StructureMap.SessionCache.GetDefault(Type pluginType, IPipelineGraph pipelineGraph)
    at StructureMap.Container.GetInstance[T]()
    at MTestStructureMapIssue.Tests.DummyTest..ctor() in C:\VS\MTestStructureMapIssue\Code\MTestStructureMapIssue.Tests\DummyTest.cs:line 23.

此错误消息背后的罪魁祸首似乎是 MSTest.exe 出于某种原因禁止某些 dll 被扫描,因为尽管我们确实使用了该属性,但它甚至没有将它们复制到“测试文件夹”:

[DeploymentItem(@"MTestStructureMapIssue.Dummy.dll")]

如何优雅地克服这一点?

4

1 回答 1

0

我找到了一种解决方法来满足 MSTest 的需求(鉴于 [DeploymentItem] 不能解决问题):

 public DummyTest()
 {
        foreach (var file in Directory.GetFiles("../../.."))
        {
            try
            {
                File.Copy(file, Path.Combine(".", Path.GetFileName(file)));
            }
            catch
            {
            }
        }
...

此代码段会将“bin”目录中的所有文件(dll、配置等)复制到 MSTest.exe 使用的测试文件夹中。

于 2018-07-30T16:18:32.783 回答