.net Gallio无法从控制台运行测试
通过Gallio运行集成测试时遇到问题。 当我使用Testdrive.NET或通过VisualStudio中的集成Gallio运行它时,测试工作正常。当我试图像nant脚本那样通过控制台运行它时,它失败了。收到的信息如下: [失败]测试 TenForce.Execution.Api2.OData.Tests/AttachmentIntegrationTests/Att achmentUpload执行 System.ServiceModel.CommunicationObjectFaultedException: 通信对象System.Data.Services.DataServiceHost不能为空 用于通信,因为它处于故障状态。在 System.ServiceModel.Channel.CommunicationObject.CloseTimeSpan 超时 System.ServiceModel.ServiceHostBase.System.IDisposable.Dispose位于 TenForce.Execution.Api2.OData.Tests.IntegrationTests.AttachmentIntegration Tests.AttachmentUpload在 D:\Users\arne.de.herdt.TENFORCE2\Documents\Developme nt\Projects\Robinson\TenForce.Execution.Api2.OData.Tests\IntegrationTests\Attach mentIntegrationTests.cs:第83行 处理测试转轮。停止时间:16:45总执行时间: 20515秒 1次运行,0次通过,1次失败,0次不确定,0次跳过 完整的命令行如下所示: Gallio.Echo.exe/r:IsolatedProcess TenFor ce.Execution.Api2.OData.Tests.dll /f:命名空间:TenForce.Execution.Api2.OData.Tes ts.IntegrationTests 我不知道是什么导致了加利奥的这个问题。它可以在VS上工作,但不能在构建代理或控制台上工作。测试的源代码如下:.net Gallio无法从控制台运行测试,.net,c#-4.0,odata,wcf-data-services,.net,C# 4.0,Odata,Wcf Data Services,通过Gallio运行集成测试时遇到问题。 当我使用Testdrive.NET或通过VisualStudio中的集成Gallio运行它时,测试工作正常。当我试图像nant脚本那样通过控制台运行它时,它失败了。收到的信息如下: [失败]测试 TenForce.Execution.Api2.OData.Tests/AttachmentIntegrationTests/Att achmentUpload执行 System.ServiceModel.CommunicationObjectFaultedEx
using System.Data.Services;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace TenForce.Execution.Api2.OData.Tests.IntegrationTests
{
using System;
using System.Collections.Generic;
using System.ServiceModel.Web;
using MbUnit.Framework;
using Objects;
using Helpers;
using Test.Attributes;
/// <summary>
/// <para>This class contains all the integration tests to verify the correct working conditions for attachment entities.</para>
/// </summary>
public class AttachmentIntegrationTests : BaseIntegrationTest
{
/// <summary>
/// <para>This test will try to create a new attachment on an item using a local file.</para>
/// </summary>
[Test, MaxDuration]
public void AttachmentUpload()
{
#region Test Preparation
// Prepare a Workspace
var workspace = CreateWorkspaceObject();
Assert.IsTrue(Factory.CreateApi().Workspaces.Create(workspace), "Expected the test workspace to be created.");
// Prepare a List
var list = CreateList();
list.Workspace = workspace;
list.ItemType = new ItemType {Id = 5};
Assert.IsTrue(Factory.CreateApi().Lists.Create(list), "Expected the test list to be created.");
// Prepare an Item.
var itemFields = new List<ItemField>
{
new ItemField {FieldId = "SF19", Type = "List", ValueId = list.Id},
new ItemField {FieldId = "SF2", Type = "Title", Value = string.Format("I {0}", DateTime.Now)},
new ItemField {FieldId = "SF4", Type = "AssignedTo", ValueId = 1}
};
var item = new Item { ItemFields = itemFields.ToArray() };
Assert.IsTrue(Factory.CreateApi().Items.Create(item), "Expected the test item to be created.");
#endregion
using (var host = new DataServiceHost(typeof (Web.Api), new[] {BaseUri}))
{
// Start the host
host.Open();
// Create a new WebClient to create a call to the attachments resource
var client = new ODataClient {BaseUri = BaseUri, Username = "sadmin", Password = string.Empty};
// Send the file contents to the service using the correct url.
string response = client.UploadAttachment(GetTestFileLocation("ReportingTest.xls"), item.Id);
var parser = new ODataParser();
parser.LoadResponse(response);
// Fetch the Id of the Attachment, this should be greater than 0.
int attachmentId = parser.GetEntityId();
Assert.IsTrue(attachmentId > 0, "Expected the Id to be greater than zero.");
// Verify if the item is coupled to the correct Item.
response = client.GetResource(string.Format("Attachments({0})/Item", attachmentId));
parser.LoadResponse(response);
int itemId = parser.GetEntityId();
Assert.IsTrue(itemId == item.Id, "Expected the linked item to have a matching Id.");
// Change the filename of the uploaded file and verify whether the file is properly renamed.
client.UpdateProperty(string.Format("Items({0})/Attachments({1})/Filename/$value", itemId, attachmentId), "uploaded_excel.xls");
// Verify if the changes made it to the database.
Attachment att = Factory.CreateApi().Attachments.Read(attachmentId);
Assert.AreEqual("uploaded_excel.xls", att.Filename, "Expected the data to be changed on the entity.");
Assert.IsTrue(System.IO.File.Exists(Factory.CreateApi().Attachments.GetAttachmentPath(att, false)), "Expected the file to be present on the hard drive.");
// Close the host properly
host.Close();
}
}
}
}
在单元测试中托管数据服务方面,我是否遗漏了什么
编辑1
运行以下命令:
netsh http add urlacl url=http://+:60000/ODataService/
用户=管理员
解决了部分问题。我现在可以通过控制台在我的开发系统上运行测试,但构建代理仍然无法运行测试。它们推送以下输出:
执行System.Net.WebException失败:远程服务器返回了
错误:500内部服务器错误。状态:协议错误响应:
System.Net.HttpWebResponse位于System.Net.WebClient.UploadFileUri
地址、字符串方法、字符串文件名位于
System.Net.WebClient.UploadFileUri地址,字符串文件名位于
System.Net.WebClient.UploadFileString地址,字符串文件名位于
TenForce.Execution.Api2.OData.Tests.Helpers.ODataClient.UploadAttachmentString
路径,中的Int32 itemId
c:\Robinson\trunk\Projects\Robinson\TenForce.Execution.Api2.OData.Tests\Helpers\ODataClient.cs:line
69在
TenForce.Execution.Api2.OData.Tests.IntegrationTests.AttachmentIntegrationTests.AttachmentUpload
在里面
c:\Robinson\trunk\Projects\Robinson\TenForce.Execution.Api2.OData.Tests\IntegrationTests\AttachmentIntegrationTests.cs:line
89
----标准输出:-无法读取配置节
通用/日志记录。使用无操作实现
我花了很长时间才弄明白,但问题不在加里奥。 问题在于用于开发OData服务的工具包。此工具包无法从控制台宿主环境运行 在将服务移动到远程服务器并编写远程调用函数和解析响应的测试之后,我们实现了预期的行为