【问题标题】:Using NUnit testing with C# Collection Class Library project在 C# 集合类库项目中使用 NUnit 测试
【发布时间】:2020-12-03 02:48:45
【问题描述】:

/在 C# 集合类库项目中使用 NUnit 测试 我无法弄清楚这段代码中的 TestFixture 任何帮助都会有很大帮助 我有一个下面的测试类/

using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using ScoringExercise;
using ScoringExercise.Entities;

namespace ScoringExerciseTests
{
    [TestFixture]
    public class ScoringTests
    {
        readonly List<MultiChoiceItem> _assessmentItems;

        public ScoringTests()
        {
            // Assessment items
            _assessmentItems = new List<MultiChoiceItem>
            {
                new MultiChoiceItem()
                {
                    ItemText = "Which city is the capital of Sweden?",
                    Options = new string[] {"Helsinki", "Stockholm", "Malmö", "Oslo"},
                    CorrectAnswerIndex = 1,
                    MarksAwardedIfCorrect = 1
                },
                new MultiChoiceItem()
                {
                    ItemText = "Which of these cheeses normally has large round holes?",
                    Options = new string[] {"Emmental", "Feta", "Danish Blue", "Gruyere"},
                    CorrectAnswerIndex = 0,
                    MarksAwardedIfCorrect = 1
                },
                new MultiChoiceItem()
                {
                    ItemText = "Which of the following is not a root vegetable?",
                    Options = new string[] {"Carrot", "Parsnip", "Turnip", "Shallot"},
                    CorrectAnswerIndex = 3,
                    MarksAwardedIfCorrect = 4
                },
                new MultiChoiceItem()
                {
                    ItemText = "What colour is the outmost archery target ring?",
                    Options = new string[] {"White", "Yellow", "Red", "Black"},
                    CorrectAnswerIndex = 0,
                    MarksAwardedIfCorrect = 1
                },
                new MultiChoiceItem()
                {
                    ItemText = "What is the chemical symbol for silver?",
                    Options = new string[] {"Au", "Sr", "Si", "Ag"},
                    CorrectAnswerIndex = 3,
                    MarksAwardedIfCorrect = 2
                }
            };

        }

        [Test]
        public void AllCorrect()
        {
            // create test data where all items have corresponding responses
            // and all responses are correct
            Dictionary<int, int> responses = new Dictionary<int, int>();

            int i = 0;
            foreach (MultiChoiceItem item in _assessmentItems)
            {
                responses.Add(i, item.CorrectAnswerIndex);
                i++;
            }

            // check that actual results are in line with expected results
            AssessmentResults expected = new AssessmentResults()
            {
                ItemsAttempted = _assessmentItems.Count,
                ItemsCorrect = _assessmentItems.Count,
                TotalMarksAwarded = _assessmentItems.Sum(item => item.MarksAwardedIfCorrect)
            };
            AssessmentResults actual = ScoringEngine.GetResults(_assessmentItems, responses);

            AssertValueEquality(expected, actual);
        }

        [Test]
        public void AllWrong()
        {
            // create test data where all items have corresponding responses
            // and all responses are wrong
            Dictionary<int, int> responses = new Dictionary<int, int>();

            int i = 0;
            foreach (MultiChoiceItem item in _assessmentItems)
            {
                if ((item.CorrectAnswerIndex + 1) < item.Options.Length)
                    responses.Add(i, item.CorrectAnswerIndex + 1);
                else
                    responses.Add(i, item.CorrectAnswerIndex - 1);
                i++;
            }

            // check that actual results are in line with expected results
            AssessmentResults expected = new AssessmentResults()
            {
                ItemsAttempted = responses.Count,
                ItemsCorrect = 0,
                TotalMarksAwarded = 0
            };
            AssessmentResults actual = ScoringEngine.GetResults(_assessmentItems, responses);

            AssertValueEquality(expected, actual);
        }

        private void AssertValueEquality(AssessmentResults expected, AssessmentResults actual)
        {
            CollectionAssert.AreEqual(
                new int[] { expected.ItemsAttempted, expected.ItemsCorrect, 
                expected.TotalMarksAwarded },
                new int[] { actual.ItemsAttempted, actual.ItemsCorrect, 
                actual.TotalMarksAwarded } 
            );
        }
    }
}

/如何在我的类库项目中实现 GetResults 方法,如下所示 我无法弄清楚这段代码中的 TestFixture 任何帮助都会有很大帮助/

using System.Collections.Generic;
using ScoringExercise.Entities;
using System.Linq;
using System.Collections;

namespace ScoringExercise
{
    public static class ScoringEngine
    {
        /// <summary>
        /// Calculates the results of an assessment based upon the test content and candidate 
        /// responses.
        /// </summary>
        public static AssessmentResults GetResults(List<MultiChoiceItem> multiChoiceItems, 
        Dictionary<int, int> responses)
        {
            //return null;
        }
    }
}

namespace ScoringExercise.Entities
{
    /// <summary>
    /// Represents a single multi-choice item in an assessment
    /// </summary>
    public class MultiChoiceItem
    {
        // the text associated with the item aka the question
        public string ItemText { get; set; }
        // the option strings from which the candidate chooses a response
        public string[] Options { get; set; }
        // the index of the correct answer from within the Options array
        public int CorrectAnswerIndex { get; set; }
        // the number of marks awarded if the correct response is chosen
        public int MarksAwardedIfCorrect { get; set; }
    }
}

namespace ScoringExercise.Entities
{
    /// <summary>
    /// Represents the results of a single assessment instance
    /// </summary>
    public class AssessmentResults
    {
        public int ItemsAttempted { get; set; }
        public int ItemsCorrect { get; set; }
        public int TotalMarksAwarded { get; set; }
    }
}

【问题讨论】:

    标签: testing nunit


    【解决方案1】:
    public static AssessmentResults GetResults(List<MultiChoiceItem> multiChoiceItems, Dictionary<int, int> responses)
            {
                int i = 0;
                int ItemsCorrect = 0;
                int TotalMarksAwarded = 0;
    
                foreach (var item in multiChoiceItems.Where(c => responses.ContainsKey(c.CorrectAnswerIndex)))
                {
                    if (item.CorrectAnswerIndex == responses[i])
                    {
                        ItemsCorrect++;
                        TotalMarksAwarded += item.MarksAwardedIfCorrect;
                    }
                    i++;
                }
    
                return new AssessmentResults
                {
                    ItemsAttempted = responses.Count,
                    ItemsCorrect = ItemsCorrect,
                    TotalMarksAwarded = TotalMarksAwarded
                };
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2017-08-03
      • 2019-09-24
      相关资源
      最近更新 更多