2012-03-21 91 views
1

我有三个项目,它使用本地代码

1)托管C++包含完整的业务逻辑单元测试C#项目

2)C++/CLI(项目名称管理

3) C#GUI

我已经在C++/CLI中添加了非托管C++的库文件,然后在C#项目中添加了C++/CLI的dll。这一切工作正常,执行无故障。

现在我想对C#函数进行单元测试,它调用C++/CLI包装,然后获取结果。我使用Visual Studio 2010.创建了一个单元测试。我在测试中添加了C++/CLI的dll project.Now当我试图执行测试抛出例外managed.dll没有找到

这里是代码

[TestMethod()] 
    public void getstateTest() 
    { 
    bool expected=true; 
    bool actual=false; 
    try 
    { 
     GUI.test target = new test(); 
     expected = true; // TODO: Initialize to an appropriate value 
     actual  = target.getstate(); 
    } 
    catch (FileNotFoundException exception) 
    { 
     MessageBox.Show("Missing file is : " + exception.FileName); 
    } 
    Assert.AreEqual(expected, actual); 
    } 



    The getstate function is 

namespace GUI 
{ 
public class test 
{ 
    public bool getstate() 
    { 
     bool chk = false; 
     bool result; 
     String a = "some path"; 
     String b = "some path" 
     String c = "some path" 
     managed objct; 
     objct = new managed(); 
     objct.Initialize(a, b, c, chk); 
     objct.Execute();//calls the C++/CLI execute which calls unmanaged C++ 
     result = objct.Executionresult();//gets a bool result 
     return result; 
    } 
} 

}

同样的事情,工作正常,当我运行应用程序上运行的测试项目,它说的DLL文件丢失

很抱歉,如果我做到了confusing.Please问,如果你提前

+0

是否报告DLL丢失或格式无效?您的单元测试需要以与它们加载的本机代码相同的位运行。 – 2012-03-21 18:26:17

+0

Dll被报告为丢失...单元测试和本地代码都在x86中运行 – 2012-03-22 04:22:10

回答

1

你看着测试项目输出文件夹需要更多的information.Thanks?也许managed.dll不会复制到输出。

更新:

请问您是否可以从异常发布融合日志?这应该给出一些想法为什么找不到文件。

+0

所有项目的输出文件都在同一个文件夹中,并且都存在 – 2012-03-21 07:04:31

+0

我之前没有使用过融合日志...我是目前正在研究它,并会告诉你...... – 2012-03-21 08:20:15

+0

Dmitry Reznik:融合日志没有显示任何东西......我的测试项目在运行测试时抛出异常 – 2012-03-21 08:58:36

0

项目可能正在编译到不同的目录。

这会导致编译器正确编译,但在运行时无法找到文件。

当您将单独的项目导入新解决方案时,通常会发生这种情况。

使新单元测试编译到同一个目录。

+0

所有项目都编译到相同的公共目录 – 2012-03-21 07:04:57