5

私はMVCと単体テストが初めてです。製品コントローラーのテストに Visual Studio 単体テスト フレームワークを使用しています。コントローラーは実際の Web サイトで動作しますが、単体テストでは常に null を返します。ViewResult や Model の名前などのキーワードを切り替えましたが、コントローラーが常に null を返すため、すべてが機能しません。次に、ブレークポイントを設定して、テスト コードのデバッグを開始します。イミディエイト ウィンドウでテストすると、値が表示されます。

ここで何が欠けていますか?

この URL にスクリーンショットがあります: http://i.imgur.com/XBmoh.png スクリーンショットでは、コントローラーからモデルが正常に渡され、P4 P5 が結果に格納されているイミディエイト ウィンドウを確認できます。UnitTestでは機能しません。

リストのコードは非常にシンプルで、ウェブサイトでうまく動作します。ここにコードがあります

    public int PageSize = 4;
    private IProductRepository repository;

    public ProductController(IProductRepository productRepository)
    {
        repository = productRepository;
    }

    public ViewResult List(int page=1)
    {
        ProductsListViewModel viewModel = new ProductsListViewModel
        {
            Products = repository.Products
            .OrderBy(p => p.ProductID)
            .Skip((page - 1) * PageSize)
            .Take(PageSize).AsEnumerable(),
            PagingInfo = new PagingInfo
            {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = repository.Products.Count()
            }
        };

        return View(viewModel);
    }
4

2 に答える 2

6

以前にこの問題が発生した場合、プロジェクトで同じバージョンの System.Web.Mvc を使用していません。メイン プロジェクトと単体テスト プロジェクトの両方で、同じバージョンの System.Web.Mvc を参照する必要があります。

于 2013-01-04T15:59:48.793 に答える
0

単体テストで、コントローラー アクションを 2 回呼び出していることに気付きました...これは、意図しない結果をもたらす可能性がありますか?

試してみてはどうですか:

//Action
ProductionsListViewModel result = (ProductsListViewModel)controller.List(2).Model;
Product prod = result.Products.ToArray();
于 2012-11-26T19:21:25.593 に答える