1

MassiveクラスでFindメソッドを作成しました。問題は、結果がnullになることはないため、常にtrueが返されることに気付いたところです。これが私のコードです:

    public dynamic Find(string email)
    {
        dynamic result = new ExpandoObject();
        dynamic experience = new ExpandoObject();
        result.Success = false;
        experience = this.Query(@"SELECT we.* FROM WorkExperience we
            LEFT JOIN Members m ON m.Id = we.MemberId 
            WHERE m.Email = @0", email);
        if (experience != null)
        {
            result.Experience = experience;
            result.Success = true;
        }
        return result;
    }

この場合、経験値がnullになることはないため、result.Successは常にfalseとして返されます。this.Query()が1つまたは複数のレコードを返すかどうかをテストするにはどうすればよいですか?

4

2 に答える 2

1

クエリがレコードを返すかどうかをテストするためにこれを行っています。

コントローラ:

 public ActionResult Index() {
        _logger.LogInfo("In home");
        //var data = _tricksTable.All(orderBy: "DateCreated");
        dynamic viewModel = new ExpandoObject();
        var data = _tricksTable.Query("SELECT TOP(10) * FROM Tricks ORDER BY DateCreated DESC");
        viewModel.TenTricksNewestFirst = data;

        var data2 = _tricksTable.Query("SELECT TOP(10) * FROM Tricks ORDER BY Votes DESC");
        viewModel.TenTricksMostPopularFirst = data2;
        return View(viewModel);
    }

そしてテスト:

[Test]
    public void a_user_should_be_able_to_view_10_newest_tricks_in_latest_videos_tab() {
        var result = _controller.Index() as ViewResult;
        dynamic viewModelExpando = result.ViewData.Model;
        var queryFromMassiveDynamic = viewModelExpando.TenTricksNewestFirst;

        var i = Enumerable.Count(queryFromMassiveDynamic);
        Assert.AreNotEqual(0, i, "TenTricksNewestFirst returned 0 records");
        Assert.LessOrEqual(i,10, "Ten Tricks Newest First returned more than 10 tricks");
    }
于 2011-10-11T22:52:15.267 に答える
0

For reference of future answer-seekers, this is actually much more simply done. Instead of using the Query method of the DynamicModel, call the Scalar method and make sure you either select a) just one value and then test if result is null or b) the count of matches, from which you can convert the result to an integer and test based on the number returned.

于 2013-06-14T10:59:15.137 に答える