(編集** 合格した単体テストをコンパイルして実行するためのコードを取得できました。コードの修正に加えて、単体テストを無期限に実行する VS2010 に問題がありました。変更された dll ファイルを置き換える必要がありました。 vs 2012 のインストールが中止されたとき. ページの下部にコントローラーと単体テストの変更を投稿しました. 回答を投稿したすべての人に感謝します.)
これは、コーディングについてオンラインで尋ねた最初の質問です。私は約 1 年間、無料のチュートリアルを使用して C# .NET およびその他の関連事項を学んでいます。これまでのところ、すべてを自分で調査してトラブルシューティングすることができました。私は今、未知の領域に足を踏み入れ始めていますが、答えが見つからないようです。
「7日間でMVCモデルビューコントローラーを段階的に学ぶ」というチュートリアルに取り組んでいます。リンクは次のとおりです 。 http://www.codeproject.com/Articles/259560/Learn-MVC-Model-view-controller-Step-by-Step-in-7
エラーの推奨リンクを調査しました。
Error 'Mvccustomer.Models.Customer' does not contain a definition for 'DisplayCustomer' and no extension method 'DisplayCustomer' accepting a first argument of type 'Mvccustomer.Models.Customer' could be found (are you missing a using directive or an assembly reference?)
私が直面している問題は、誰かが同様のファイル参照を使用して単体テストを作成しているような状況を見つけることができないように見えることです。私はMVCと単体テストにまったく慣れていません。
チュートリアルの問題の 1 つは、作成者がビデオで 1 つの名前空間/ファイル名のセットを使用し、別のセットをチュートリアルで使用していることです。私は自分でその問題をトラブルシューティングすることができました。たとえば、最初はプロジェクト名として「Mvccustomer」を使用していましたが、初日の 4 番目または 5 番目のラボでは、「Mvcinputscreen」と呼んでいます。プロジェクトでの顧客クラスの参照方法に問題があるのではないかと思いますが、今のところわかりません。
エラーが発生する単体テストは次のとおりです。
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Mvccustomer.Models;
namespace MvcUnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void DisplayCustomer()
{
Customer obj = new Customer();
var varresult = obj.DisplayCustomer();
Assert.AreEqual("DisplayCustomer", varresult.ViewName);
}
}
}
顧客クラスは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Mvccustomer.Models;
namespace Mvccustomer.Models
{
public class Customer
{
public int Id { set; get; }
public string CustomerCode { set; get; }
public double Amount { set; get; }
}
}
これはディスプレイ カスタマー ビューです。
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<Mvccustomer.Models.Customer>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>DisplayCustomer</title>
</head>
<body>
<div>
The customer id is <%= Model.Id %> <br />
The customer id is <%= Model.CustomerCode %> <br />
<%if (Model.Amount > 100)
{%>
This is a priveleged customer.
<% }
else
{ %>
This is a normal customer
<%} %>
</div>
</body>
</html>
そして、顧客コントローラー:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mvccustomer.Models;
namespace Mvccustomer.Controllers
{
public class CustomerController : Controller
{
//
// GET: /Customer/
public ActionResult Index()
{
return View();
}
public ActionResult FillCustomer()
{
return View();
}
public ActionResult DisplayCustomer(Customer obj)
{
return View(obj);
}
}
}
プロジェクトの要素をさらに投稿する必要がある場合はお知らせください。Mvccustomer プロジェクトをビルドすると、エラーなしで正常にコンパイルされます。問題を引き起こしているのは単体テストだけです。この質問は少し入り組んでいると思いますが、建設的な批判とともに得られる学習経験を楽しみにしています。ありがとうございました。
最終的に機能した編集されたコントローラーと単体テスト:
カスタマーコントローラー:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mvccustomer.Models;
using Mvccustomer.Controllers;
namespace Mvccustomer.Controllers
{
public class CustomerController : Controller
{
//
// GET: /Customer/
public ActionResult Index()
{
return View();
}
public ActionResult FillCustomer()
{
return View();
}
[HttpPost]
public ActionResult DisplayCustomerView(CustomerModel customerModel)
{
var myView = View("DisplayCustomerView", customerModel);
//myView.ViewName = "DisplayCustomer";
return myView;
}
}
}
編集された単体テスト:
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Mvccustomer.Models;
using Mvccustomer.Controllers;
using System.Web.Mvc;
namespace MvcUnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void DisplayCustomer()
{
// instantiates new instance of CustomerController class
CustomerController controller = new CustomerController();
var customer = new CustomerModel();
var customerViewActionResult = controller.DisplayCustomerView(customer);
var customerViewViewResult = customerViewActionResult as ViewResult;
Assert.AreEqual("DisplayCustomerView", customerViewViewResult.ViewName);
}
}
}