无法在Visual Studio 2012中调试单元测试项目

16

我没有找到类似的帖子,所以希望这不是重复的问题。

我有一个C#类库,在Visual Studio 2012中尝试运行单元测试。我已经向我的解决方案添加了一个新的单元测试项目,并在其中添加了我的主要项目作为参考。我将我的单元测试项目设置为启动项目。当我尝试进行调试时,会出现错误信息:

类库输出类型的项目不能直接启动。

为了调试此项目,请将可执行项目添加到该解决方案中,并引用库项目。将可执行项目设置为启动项目。

enter image description here

根据msdn上的演练,当我点击“调试”时,应该正在运行测试。有什么想法吗?下面是我的单元测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Common;
using Messages;

namespace MessageUnitTests
{
    [TestClass]
    class RegistrationTester
    {
        [TestMethod]
        public void RegistrationRequest_TestConstructorsAndFactories()
        {
            RegistrationRequest rr1 = new RegistrationRequest("myhandle");
            Assert.AreEqual("myhandle", rr1.Handle);

            rr1 = new RegistrationRequest("longHandle-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789'|;:',.=-_+!@#$%^&*()");
            Assert.AreEqual("longHandle-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789'|;:',.=-_+!@#$%^&*()", rr1.Handle);

            rr1 = new RegistrationRequest("");
            Assert.AreEqual("", rr1.Handle);

            rr1 = new RegistrationRequest(null);
            Assert.AreEqual(null, rr1.Handle);

            rr1 = new RegistrationRequest("myhandle");
            ByteList bytes = new ByteList();
            rr1.Encode(bytes);

            RegistrationRequest rr2 = RegistrationRequest.Create(bytes);
            Assert.IsNotNull(rr2);
            Assert.AreEqual(rr1.IsARequest, rr2.IsARequest);
            Assert.AreEqual(rr1.MessageNr.ProcessId, rr2.MessageNr.ProcessId);
            Assert.AreEqual(rr1.MessageNr.SeqNumber, rr2.MessageNr.SeqNumber);
            Assert.AreEqual(rr1.ConversationId.ProcessId, rr2.ConversationId.ProcessId);
            Assert.AreEqual(rr1.ConversationId.SeqNumber, rr2.ConversationId.SeqNumber);
            Assert.AreEqual(rr1.RequestType, rr2.RequestType);
            Assert.AreEqual(rr1.SessionId, rr1.SessionId);
            Assert.AreEqual(rr1.Handle, rr2.Handle);
        }

        //[TestMethod]
        //public void RegistrationRequest_EncodingDecoding()
        //{
        //    Message m1 = new RegistrationRequest("myhandle");
        //    m1.MessageNr = MessageNumber.Create(10, 14);
        //    m1.ConversationId = MessageNumber.Create(10, 12);
        //    ByteList bytes = new ByteList
        //}
    }
}
3个回答

24
您需要用不同的方式进行调试:

在此输入图片描述


我看到了测试资源管理器,但它没有显示任何测试。我需要做些什么才能让测试出现在测试资源管理器中吗? - Matt
我认为不会,因为您在添加项目时使用了单元测试模板。如果您在测试中右键单击,是否会出现运行所选测试的选项?我没有经常使用VS2012,所以对它不是百分之百熟悉。 - Gromer
点击那个按钮会得到和运行测试相同的结果。这里有一张截图,实际上显示了测试资源管理器。 http://i.imgur.com/mmtX8.png - Matt
1
我找到了问题所在,我的方法是异步 void,但它需要是异步 Task 才能成为有效的测试方法。 - Doguhan Uluca
应该有人将这个回答标记为此问题的正确答案。 - Eido95
显示剩余5条评论

0

创建包含测试的 Visual Studio 项目时,请确保使用了“单元测试项目”模板。Visual Studio 需要一些 csproj 标记中的元数据才能执行类库。

您可以通过在记事本中编辑 csproj 文件来添加或确认是否存在:

<Project>
 <PropertyGroup>
  <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
 </PropertyGroup>
</Project>

详情请参阅http://onlinecoder.blogspot.ca/2009/09/visual-studio-projects-project-type.html

现在,您应该可以使用Visual Studio中的F5键运行它了。 如果仍不起作用,请右键单击测试,然后单击“运行测试”或使用测试资源管理器(Test > Windows > Test Explorer)


0

右键单击项目,选择属性,将输出类型设置为 Windows 应用程序。然后再次右键单击项目,选择“生成”并运行项目,错误将得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接