【发布时间】:2015-05-04 09:23:06
【问题描述】:
我是在 Visual Studio 中编写单元测试的新手。在我的网络应用程序中,我有以下内容。
1> 接口
public interface IGettProxy
{
Task<List<CityDetails>> getCity();
Task<List<CountryDetails>> getCountry(int cityId);
}
2> 合约(接口的实现)
public async Task<List<CityDetails>> getCity()
{
try
{
_serviceUrl = String.Format("{0}/Search/getCityinfo", _serviceUrl);
string requestUri = _serviceUrl;
client = new HttpClient();
var response = await client.GetAsync(requestUri);
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
var Result = new JavaScriptSerializer().Deserialize<List<CityDetails>>(json);
return Result;
}
else
{
throw new Exception("Errorhandling message");
}
}
catch (Exception ex) { throw ex; }
}
public async Task<List<CountryDetails>> getCountry(int cityId)
{
try
{
_serviceUrl = String.Format("{0}/Search/getcountryinfo?cityId={1}", _serviceUrl, cityId);
string requestUri = _serviceUrl;
client = new HttpClient();
var response = await client.GetAsync(requestUri);
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
var Result = new JavaScriptSerializer().Deserialize<List<CountryDetails>>(json);
return Result;
}
else
{
throw new Exception("Errorhandling message");
}
}
catch (Exception ex) { throw ex; }
}
3> 控制器
private IGettProxy igettProxy;
public GettController(IGettProxy gettProxy)
{
igettProxy = gettProxy;
}
/// <summary>
/// Invoked on Page Load
/// </summary>
/// <returns></returns>
public async Task<ActionResult> Getdet()
{
try
{
List<CityDetails> cityDetails = await igettProxy.getCity();
SearchModel viewModel = new SearchModel();
viewModel.cityDetail = cityDetails;
return View(viewModel);
}
catch (Exception ex) { throw ex; }
}
/// <summary>
/// Get Country list based on city information
/// </summary>
/// <param name="cityId"></param>
/// <returns></returns>
public async Task<JsonResult> getCountry (int cityId)
{
try
{
List<CountryDetails> CountryDetails = await iSearchProxy.getCountry(cityId);
return Json(CountryDetails,JsonRequestBehavior.AllowGet);
}
catch (Exception ex) { throw ex; }
}
我有不同的数据成员类库。
对于注入配置,我使用 Unity 方法。
所以在这个视图中我有下拉绑定城市,国家的价值。
对于这个下拉绑定,我想编写单元测试。请帮我解决这个细节。提前致谢。
我的测试方法
[TestMethod]
public void bookAppointment()
{
List<CityDetails> cityDetails = new List<CityDetails>();
cityDetails.Add(new CityDetails {ID=1,CityName="Delhi"});
// var mockproxy = new StubISearchProxy();
StubISearchProxy searchProxy = new StubISearchProxy();
searchProxy.GetCity = () => cityDetails;
SearchController searchController = new SearchController(searchProxy);
var str = searchController.getCity();
}
【问题讨论】:
-
您究竟想在代码中进行什么单元测试?你不知道什么或问题出在哪里?方法名称也遵循 .net 命名约定,即 PascalCase。
-
嗨@SriramSakthivel,感谢您对我的问题的看法。我已经更新了我的测试功能。我真的很感动。我不知道我必须为下拉绑定做什么。并在实现中使用 Task。
-
MVC 的理念是您不测试 UI。您在控制器和您使用的其他服务中测试业务逻辑。您的测试方法也缺少断言。断言必须是真/假。我不清楚你不知道什么。很抱歉。
-
@SriramSakthivel - 在我的控制器中,我有 Getdet() 方法。我想为此方法编写单元测试。
标签: c# unit-testing model-view-controller dependency-injection microsoft-fakes