首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >单元测试将不会运行:进程由于StackOverflowException而终止

单元测试将不会运行:进程由于StackOverflowException而终止
EN

Stack Overflow用户
提问于 2018-06-10 06:18:38
回答 1查看 1.7K关注 0票数 3

我正在做单元测试来测试我写的一个算法,不幸的是,由于这个错误,这些测试甚至不会运行:

10-6-2018 00:12:00信息性==========运行测试已完成:0运行(0:00:06,5685302) ========== 10-6-2018 00:12:04信息性-运行测试已启动- 10-6-2018 00:12:09错误活动测试运行已中止。原因: StackOverflowException导致进程终止。

这些是我拥有的所有单元测试:

代码语言:javascript
复制
namespace AlgoritmeTest
{
    [TestClass]
    public class AlgoritmeTests
    {
        [TestMethod]
        public void TestAddingWagonToTrain()
        {
            Train train = new Train();
            Wagon wagon = new Wagon(10);

            List<Wagon> expected = new List<Wagon>();
            expected.Add(wagon);

            train.AddWagon(wagon);
            List<Wagon> actual = train.GetWagons();
            Assert.AreEqual(expected, actual, "Failed to add wagon to train");

        }

        [TestMethod]
        public void TestAddingAnimalToWagon()
        {
            Train train = new Train();
            Wagon wagon = new Wagon(10);
            Animal animal = new Animal("Goudvis", AnimalFood.Meat, AnimalSize.Big);


            List<Animal> expected = new List<Animal>();
            expected.Add(animal);

            wagon.AddAnimal(animal);
            List<Animal> actual = wagon.GetAnimals();

            Assert.AreEqual(expected, actual, "Failed to add animal to wagon");
        }
        [TestMethod]
        public void TestIfAnimalsAreReturned()
        {
            Animal animal = new Animal();

            Animal goudvis = new Animal("Goudvis", AnimalFood.Meat, AnimalSize.Big);
            Animal visstick = new Animal("Visstick", AnimalFood.Meat, AnimalSize.Big);
            animal.animalsFromTheCircus.Add(goudvis);
            animal.animalsFromTheCircus.Add(new Animal("Potvis", AnimalFood.Plants, AnimalSize.Medium));
            animal.animalsFromTheCircus.Add(new Animal("Zalm", AnimalFood.Meat, AnimalSize.Small));
            animal.animalsFromTheCircus.Add(visstick);
            animal.animalsFromTheCircus.Add(new Animal("Varkenshaasje", AnimalFood.Plants, AnimalSize.Big));

            List<Animal> expected = new List<Animal>();
            expected.Add(goudvis);
            expected.Add(visstick);

            List<Animal> actual = animal.GetAllBigMeatEaters();

            Assert.AreEqual(expected, actual, "Failed to get all animals which meet criteria");
        }
        [TestMethod]
        public void TestIfAlgorithmStepWorks()
        {
            Program program = new Program();
            Animal animal = new Animal();

            Wagon wagon = new Wagon(10);
            Wagon wagon2 = new Wagon(10);

            Animal goudvis = new Animal("Goudvis", AnimalFood.Meat, AnimalSize.Big);
            Animal visstick = new Animal("Visstick", AnimalFood.Meat, AnimalSize.Big);

            animal.animalsFromTheCircus.Add(goudvis);
            animal.animalsFromTheCircus.Add(visstick);
            animal.animalsFromTheCircus.Add(new Animal("Potvis", AnimalFood.Plants, AnimalSize.Medium));
            animal.animalsFromTheCircus.Add(new Animal("Zalm", AnimalFood.Meat, AnimalSize.Small));
            animal.animalsFromTheCircus.Add(new Animal("Varkenshaasje", AnimalFood.Plants, AnimalSize.Big));

            wagon.AddAnimal(goudvis);
            wagon2.AddAnimal(visstick);

            Train expected = new Train();

            expected.AddWagon(wagon);
            expected.AddWagon(wagon2);



            program.SetUpProgram(animal.animalsFromTheCircus);
            Train actual = program.AddAllMeatEaters();

            Assert.AreEqual(expected, actual, "Failed to get all animals which meet criteria and place them in train according to alogrithm");
        }
    }
}

Animal.cs

代码语言:javascript
复制
public class Animal
{
    private string animalName;
    private AnimalFood animalFood;
    private AnimalSize animalSize;

    public Animal(string animalName, AnimalFood animalFood, AnimalSize animalSize)
    {
        this.animalName = animalName;
        this.animalFood = animalFood;
        this.animalSize = animalSize;
    }
    public Animal()
    {

    }

    public List<Animal> animalsFromTheCircus = new DataGenerator().GenerateAnimals(100);

    public List<Animal> GetallAnimals()
    {
        return animalsFromTheCircus;
    }

    public List<Animal> GetAllBigMeatEaters()
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Big && animal.getAnimalFood() == AnimalFood.Meat).ToList();
    }
    public List<Animal> GetAllBigMeatEaters(List<Animal> animalsFromTheCircus)
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Big && animal.getAnimalFood() == AnimalFood.Meat).ToList();
    }
    public List<Animal> GetAllSmallMeatEaters()
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Small && animal.getAnimalFood() == AnimalFood.Meat).ToList();
    }
    public List<Animal> GetAllBigPlantEaters()
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Big && animal.getAnimalFood() == AnimalFood.Plants).ToList();
    }

    public List<Animal> GetAllMediumMeatEaters()
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Medium && animal.getAnimalFood() == AnimalFood.Meat).ToList();
    }
    public List<Animal> GetAllMediumPlantEaters()
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Medium && animal.getAnimalFood() == AnimalFood.Plants).ToList();
    }

    public List<Animal> GetAllSmallPlantEaters()
    {
        return animalsFromTheCircus.Where(animal => animal.getAnimalSize() == AnimalSize.Small && animal.getAnimalFood() == AnimalFood.Plants).ToList();
    }

    public string getAnimalName()
    {
        return this.animalName;
    }

    public AnimalFood getAnimalFood()
    {
        return this.animalFood;
    }

    public AnimalSize getAnimalSize()
    {
        return this.animalSize;
    }
}

Wagon.cs

代码语言:javascript
复制
   public class Wagon
{
    private List<Animal> animals;
    private int maxSize;

    public Wagon(int maxSize)
    {
        this.animals = new List<Animal>();
        this.maxSize = maxSize;
    }

    public void AddAnimal(Animal animal)
    {
        this.animals.Add(animal);
    }

    public List<Animal> GetAnimals()
    {
        return this.animals;
    }
}

Train.cs

代码语言:javascript
复制
    public class Train
{
    private List<Wagon> wagons;

    public Train()
    {
        this.wagons = new List<Wagon>();
    }

    public void AddWagon(Wagon wagon)
    {
        this.wagons.Add(wagon);
    }

    public List<Wagon> GetWagons()
    {
        return this.wagons;
    }
}

我的测试有问题吗?为什么它们不能运行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 06:32:32

您所显示的代码中没有循环引用,我敏锐的感觉告诉我问题就在这里。

代码语言:javascript
复制
public List<Animal> animalsFromTheCircus = new DataGenerator().GenerateAnimals(100);

更新

每当你创造一个动物,它就产生了动物,而动物又创造了动物,奇点就发生了。整个宇宙都被吸进去了

更新2

这里还有一个严重的关注点分离问题,我的意思是为什么类动物甚至有一个动物列表,而我知道的并不是很多动物都有子动物(在任何正常意义上都是如此)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档