System.AccessviolationException происходит при запуске единичного теста на C# для объекта Node2DC#

Место общения программистов C#
Ответить
Anonymous
 System.AccessviolationException происходит при запуске единичного теста на C# для объекта Node2D

Сообщение Anonymous »

Я строю карточную игру, используя Godot 4.5, с C#. Я пытаюсь провести однозначное тестирование объекта карты, который наследует от Node2d, но когда я пытаюсь запустить тест, я получаю следующее исключение: < /p>

Код: Выделить всё

Exception has occurred: CLR/System.AccessViolationException
An unhandled exception of type 'System.AccessViolationException' occurred in GodotSharp.dll: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

Это объект карты, который я пытаюсь протестировать (не весь код был включен для краткости, но предположим, что каждая переменная/константа/метод/enum и т. Д. Объявлен правильно):
using Godot;
using System;
using System.Collections.Generic;

///
/// A playing card.
///
public partial class Card: Node2D
{
public CardNumber CardNumber { get; set; }
public CardSuit CardSuit { get; set; }

public double CalculateCardScore(TrumpSuit trump, int deckSize = 52)
{
var cardsBeaten = (int)this.CardNumber - 2;

return cardsBeaten;
}
}
< /code>
Я создал этот модульный тест для метода CalculateCardscore (): < /p>
namespace BlogTheGameUnitTests;

public class CardTests
{
[Fact]
public void CardCalculateCardScore_NoTrumps_DefaultDeckSize()
{
// Arrange
Card testCard = new() { CardNumber = CardNumber.SEVEN, CardSuit = CardSuit.HEART };
double expectedScore = (double)(((int)testCard.CardNumber - 2) / 51);

// Act
double actualScore = testCard.CalculateCardScore(TrumpSuit.NO_TRUMP);

// Assert
Assert.Equal(1, actualScore);
}
}
< /code>
Я ожидал, что этот тест не пройдет (тестируемый метод находится в процессе работы, поэтому с использованием TDD я в конечном итоге получил тест для прохождения), вместо того, чтобы бросить систему. Связано с моей конкретной проблемой - этот пост Reddit. У него нет ответа, который решает его, но вопрос, похоже, намекает на ядро ​​C ++ движения Godot, не работающего при выполнении этих модульных тестов, что приводит к этому исключению при попытке создания каких -либо объектов, наследующих от Node2d. Как мне предотвратить это исключение, чтобы я мог правильно запустить свой модульный тест?

Подробнее здесь: https://stackoverflow.com/questions/797 ... it-test-fo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»