Skip to content

Commit

Permalink
Реализована команда прямолинейного равномерного движения без деформац…
Browse files Browse the repository at this point in the history
…ии (#10)

Co-authored-by: etyumemntcev <[email protected]>
  • Loading branch information
etyumentcev and etyumemntcev authored Jan 5, 2024
1 parent bb5709d commit 395192b
Show file tree
Hide file tree
Showing 14 changed files with 814 additions and 0 deletions.
24 changes: 24 additions & 0 deletions spacebattle/game.tests/Features/MoveCommand.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Функция: Прямолинейное равномерное движение без деформации

Сценарий: Объект, имеющий мгновенную скорость, перемещается в пространсте
Дано объект находится в точке (12, 5)
И объект имеет мгновенную скорость (-2, 4)
Когда происходит прямолинейное равномерное движение без деформации
Тогда объект перемещается в точку (10, 9)

Сценарий: Объект, положение в пространстве которого определить невозможно, невозможно переместить
Дано объект, положение в пространстве которого, определить невозможно
Когда происходит прямолинейное равномерное движение без деформации
Тогда операция прерывается выбросом исключения

Сценарий: Объект, который не имеет мгновенную скорость, невозможно переместить
Дано объект, который не имеет мгновенную скорость
Когда происходит прямолинейное равномерное движение без деформации
Тогда операция прерывается выбросом исключения

Сценарий: Объект, положение в пространстве измнеить невозможно, невозможно переместить
Дано объект находится в точке (12, 5)
И объект имеет мгновенную скорость (-2, 4)
И объект, положение в пространстке которого изменить нельзя
Когда происходит прямолинейное равномерное движение без деформации
Тогда операция прерывается выбросом исключения
277 changes: 277 additions & 0 deletions spacebattle/game.tests/Features/MoveCommand.feature.cs

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions spacebattle/game.tests/Features/Vector.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Функция: Вектор n-мерного веторного пространства
Для описания атрибутов объекта - положение в пространстве, мгновенная скоровть
используются объекты класса Vector.

@позитивный
Сценарий: Два веткора можно сложить
Дано двухмерный вектор a с координатами (2, 3)
И двухмерный вектор b с координатами (2, -1)
Когда складываем веторы a и b
Тогда получаем вектор с координатами (4, 2).

@негативный
Сценарий: Два вектора разной размерности складывать нельзя
Дано двухмерный вектор a с координатами (2, 3)
И трехмерный вектор b с координатами (2, -1, 0)
Когда складываем веторы a и b
Тогда выбрасывается исключение
194 changes: 194 additions & 0 deletions spacebattle/game.tests/Features/Vector.feature.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions spacebattle/game.tests/ImplicitUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
global using FluentAssertions;
global using TechTalk.SpecFlow;
global using Xunit;
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
namespace SpaceBattle.Tests.StepDefinitions
{
[Binding]
public class ВекторN_МерногоВеторногоПространстваStepDefinitions
{
Vector a;
Vector b;
Vector result;
Exception _ex;


[Given(@"двухмерный вектор a с координатами \((.*), (.*)\)")]
public void GivenВекторAСКоординатами(int x, int y)
{
a = new Vector(x, y);
}

[Given(@"двухмерный вектор b с координатами \((.*), (.*)\)")]
public void GivenВекторBСКоординатами(int x, int y)
{
b = new Vector(x, y);
}

[Given(@"трехмерный вектор b с координатами \((.*), (.*), (.*)\)")]
public void GivenВекторBСКоординатами(int x, int y, int z)
{
b = new Vector(x, y, z);
}

[When(@"складываем веторы a и b")]
public void WhenСкладываемВеторыAИB()
{
try
{
result = a + b;
}
catch(Exception ex)
{
_ex = ex;
}
}

[Then(@"получаем вектор с координатами \((.*), (.*)\)\.")]
public void ThenПолучаемВекторСКоординатами_(int x, int y)
{
Assert.Equal(new Vector(x, y), result);
}

[Then(@"выбрасывается исключение")]
public void ThenВыбрасываетсяИсключение()
{
Assert.ThrowsAny<Exception>(() => throw _ex);
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using Moq;
using SpaceBattle;

namespace Spacebattle.tests.StepDefinitions
{
[Binding]
public class ПрямолинейноеРавномерноеДвижениеБезДеформацииStepDefinitions
{
Mock<IMovable> _obj = new Mock<IMovable>();
Exception? _ex = null;

[Given(@"объект находится в точке \((.*), (.*)\)")]
public void GivenОбъектНаходитсяВТочке(int p0, int p1)
{
_obj.SetupGet<Vector>(
o => o.Location
)
.Returns(new Vector(p0, p1))
.Verifiable();
}

[Given(@"объект имеет мгновенную скорость \((.*), (.*)\)")]
public void GivenОбъектИмеетМгновеннуюСкорость(int p0, int p1)
{
_obj.SetupGet<Vector>(
o => o.Velocity
)
.Returns(new Vector(p0, p1))
.Verifiable();
}

[When(@"происходит прямолинейное равномерное движение без деформации")]
public void WhenПроисходитПрямолинейноеРавномерноеДвижениеБезДеформации()
{
try
{
new MoveCommand(_obj.Object).Execute();
}
catch (Exception ex)
{
_ex = ex;
}
}

[Then(@"объект перемещается в точку \((.*), (.*)\)")]
public void ThenОбъектПеремещаетсяВТочку(int p0, int p1)
{
_obj.VerifySet(o => o.Location = new Vector(p0, p1));
Assert.Null(_ex);
}

[Given("объект, положение в пространстве которого, определить невозможно")]
public void GivenОбъектПоложениеВПространствеКоторогоОпределитьНевозможно()
{
_obj.SetupGet<Vector>(
o => o.Location
)
.Throws<Exception>()
.Verifiable();
}


[Given(@"объект, который не имеет мгновенную скорость")]
public void GivenОбъектКоторыйНеИмеетМгновеннуюСкорость()
{
_obj.SetupGet<Vector>(
o => o.Velocity
)
.Throws<Exception>()
.Verifiable();
}

[Given("объект, положение в пространстке которого изменить нельзя")]
public void GivenОбъектПоложениеВПространсткеКоторогоИзменитьНельзя()
{
_obj.SetupSet(o => o.Location = It.IsAny<Vector>()).Throws<Exception>().Verifiable();
}

[Then(@"операция прерывается выбросом исключения")]
public void ThenОперацияПрерываетсяВыбросомИсключения()
{
Assert.NotNull(_ex);
}
}
}
Loading

0 comments on commit 395192b

Please sign in to comment.