如何强烈引用.exe文件?

时间:2012-07-22 04:48:36

标签: c# unit-testing

我正在使用C#4.0。

我正在使用Microsoft.VisualStudio.TestTools.UnitTesting运行单元测试。

我的UnitTest项目测试另一个项目,比如ProjectA。 ProjectA创建了一个这样的过程:

Process mplex = new Process();
psi = new ProcessStartInfo();
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
psi.RedirectStandardError = true;
psi.FileName = "cmd.exe";
psi.Arguments = "/C mplex omittedForBrevity";
mplex.StartInfo = psi;
mplex.Start();

/* This is telling me: "'mplex' is not recognized 
 * as an internal or external command, operable 
 * program or batch file." */
var a = mplex.StandardError.ReadToEnd();

我在各种bin中放置了“MPLex.exe”,包括“AppDomain.CurrentDomain.BaseDirectory”(我的UnitTest项目的\ bin \ Debug \文件夹)。

MPLex.exe基本上是微软GPLEX的衍生产品,它是Flex / Lex的C#版本。当我在ProjectA中添加对MPLex.exe的引用并在对象浏览器中查看它时,我看不到任何看起来像Main的方法,或公共方式与它接口,否则我会这样做而不是正如我上面所做的那样,通过cmd调用它。

我认为发生的事情是它在进行单元测试时,它不会搜索\ bin \ Debug \目录。当我在非单元测试ProjectB中从Main方法运行ProjectA中的相同代码时,它工作正常。如果我能以某种方式强烈引用.exe以便它被复制到任何需要的地方,那么我认为我的问题将得到解决。我怎么能这样做?

编辑:

添加此修复它,但据我所知,我可能刚刚打破了其他一些尚未知晓的东西。

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

3 个答案:

答案 0 :(得分:1)

.exe是一个C#编译代码,类似于dll,除了它有附加标题,描述了代码的入口点。

我做了以下步骤,它对我有用。

1 - 使用静态方法Main和非静态方法

创建了一个exe
namespace TestConsole1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Write("hello 1st");
        }

        public void TestMethod2()
        {
            Console.Write("hello 2nd");
        }
    }
}

2 - 在另一个类库项目中引用它作为项目引用,以下代码工作正常。

TestConsole1.Program prg = new TestConsole1.Program();

prg.TestMethod2();

我也试过更改" some.exe"的exe名称。 to" some.dll"然后在项目中引用它,它也运行良好。

答案 1 :(得分:1)

mstest不会在bin中运行您的单元测试。它将测试和引用的程序集复制到测试部署文件夹,通常位于解决方案目录中的TestResults下。我已经“单元”测试了类似的组件,并且总是需要使用部署功能,这对于如此简单的事情来说是一件令人头疼的问题,但是这里也是如此。

首先,您的测试设置必须启用部署。转到testsettings文件并选择部署选项卡,然后单击enable deployment。根据解决方案的结构,您可以在此处添加mplex文件。在我们的项目中,我不这样做,因为必要的文件通常在测试的源控制树之外,VS会抱怨,如果是这种情况,请使用我在下面描述的文件链接。

您还可以将DeploymentItem属性添加到特定测试或测试类,并且只有在运行这些测试时才会复制该文件。如果它是一个您不想一直复制的大型数据文件,这将非常有用。

如果必要的文件在测试解决方案之外,则在测试项目中添加必要的文件作为链接,并将构建操作设置为始终复制。然后添加到testsettings中的已部署文件或使用DeploymentItem属性。

答案 2 :(得分:1)

在项目中引用.exe bin是一种不好的做法。我建议: - 在您的环境路径变量上设置mplex的路径 -call mplex from cmd by(在shellexecute上作为参数命令行的复杂) 最好的关注