【发布时间】:2018-09-17 03:44:48
【问题描述】:
public IList<FormResponse> GetForms(HttpRequestMessage request)
{
string storeCode = ExtractBasicAuthUserFromHeader(request);
List<Form> forms = _apiRepository.GetForms(storeCode); ///23424324
return forms;
}
private string ExtractBasicAuthUserFromHeader(HttpRequestMessage reqeust)
{
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string usernamePassword = encoding.GetString(Convert.FromBase64String(reqeust.Headers.Authorization.Parameter
));
return usernamePassword.Substring(0, usernamePassword.IndexOf(':'));
}
我写了下面的测试来测试上面
private readonly Mock<IApiRepository> _apiRepository = new Mock<IApiRepository>();
[TestInitialize]
public void Init()
{
_apiRepository.Setup(x => x.GetForms("23424324")).Returns(_forms); //skipping FromBase64String converation for understanding
}
[TestMethod]
public void GetForms_ReturnFormList()
{
HttpRequestMessage reqeust = new HttpRequestMessage(); ;
//Error CS0200 Property or indexer 'AuthenticationHeaderValue.Parameter' cannot be assigned to -- it is read only
reqeust.Headers.Authorization.Parameter = "23424324:12341234123";
IList<FormResponse> formList = _formService.GetForms(reqeust);
Assert.AreEqual(formList.Count, 2);
}
出现以下错误
错误 CS0200 无法将属性或索引器“AuthenticationHeaderValue.Parameter”分配给 -- 它是只读的
想知道如何模拟 HttpRequestMessage reqeust = new HttpRequestMessage(); 添加 reqeust.Headers.Authorization.Parameter 基本字符串 在服务类中测试 GetForms 功能
【问题讨论】:
-
您应该将
reqeust.Headers.Authorization的整个值设置为request.Headers.Authorization = new AuthenticationHeaderValue(somesceme, someparameter");。 -
解决了我的问题,没想到这么简单 :) 请将其添加为答案,
标签: c# unit-testing