#c# #xunit #test-explorer
Вопрос:
Эй, я прохожу учебник по модульному тестированию на c#, и я не получаю Testexplorer для запуска моих тестов. Он продолжает говорить мне, что есть тесты, но они не выполняются. я в основном перепробовал все, что мне кажется, поэтому я спрашиваю! Почему мои тесты не выполняются, это ошибка в vs или я просто упускаю что-то глупое? Я отправлю учебник, который я использую, но он показывает .net framework, и я понимаю, что мне нужно использовать тестирование .net core для .net core и так далее, поэтому вот учебник https://www.youtube.com/watch?v=ub3P8c87cwkamp;t=1001s и вот мой код…
Класс Тестирования
using System;
using Gradebook;
using Xunit;
namespace GradeBook.Tests
{
public class BookTests
{
[Fact]
public void Test1()
{
// arrange
var book = new Book("");
// act
book.AddGrade(89.1);
book.AddGrade(90.5);
book.AddGrade(77.3);
var result = book.GetStatistics();
// assert
Assert.Equal(85.6, result.Average, 1);
Assert.Equal(90.5, result.High, 1);
Assert.Equal(77.3, result.Low, 1);
}
}
}
Тестирование класса im
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Gradebook
{
public class NamedObject
{
public string Name { get; set; }
public NamedObject(string name)
{
Name = name;
}
}
public abstract class BookBase : NamedObject
{
protected BookBase(string name) : base(name)
{
}
public abstract void AddGrade(double grade);
}
public class Book : BookBase
{
List<double> grades { get; set; }
public Book(string name) : base(name)
{
grades = new List<double>();
this.Name = name;
}
public override void AddGrade(double grade)
{
if(grade <= 100 amp;amp; grade >= 0)
{
grades.Add(grade);
}
}
public Statistics GetStatistics()
{
var result = new Statistics();
result.High = double.MinValue;
result.Low = double.MaxValue;
foreach (var grade in grades)
{
result.Low = Math.Min(grade, result.Low);
result.High = Math.Max(grade, result.High);
result.Average = grade;
}
result.Average /= grades.Count;
return resu<
}
}
}
Main
using System;
using System.Collections.Generic;
namespace Gradebook
{
class Program
{
//Double is twice as precise as float. Though takes more memmory.
static void Main(string[] args)
{
var book = new Book("Jens's Grade Book");
book.AddGrade(89.1);
book.AddGrade(90.5);
book.AddGrade(77.5);
var stats = book.GetStatistics();
Console.WriteLine($"The lowest grade is {stats.Low}");
Console.WriteLine($"The highest grade is {stats.High}");
Console.WriteLine($"The average grade is {stats.Average: N1}");
}
private static void EnterGrades(Book book)
{
while (true)
{
Console.Write("Enter a grade or press 'q' to quit: ");
var input = Console.ReadLine();
if(input == "q")
{
break;
}
try
{
var grade = double.Parse(input);
book.AddGrade(grade);
}
catch(ArgumentException ex)
{
Console.WriteLine(ex.Message);
}
catch(FormatException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("**");
}
}
}
public void useLessCode()
{
//float x;
//float y;
//x = 34.1F;
//y = 34.6F;
//var result = x y;
//Console.WriteLine(result.ToString());
//Arrays are static until used function Resize...
//var numbers = new[] { 12.7F, 10.3F, 6.11F, 4.1F };
//float result = new float();
//foreach(var number in numbers)
//{
// result = number;
//}
//Console.WriteLine(result);
//numbers[0] = 12.7F;
}
}
}
класс статистики
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Gradebook
{
public class Statistics
{
public double Average;
public double High;
public double Low;
}
}
изображение моего редактора кода, чтобы вы могли видеть мои ссылки и пакеты
Ответ №1:
Установка пакета Microsoft.NET.Test.Sdk из диспетчера пакетов nuget решила мою проблему.