Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
282 changes: 282 additions & 0 deletions ObjectPrinting.Tests/ObjectPrinterAcceptanceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
using System.Globalization;
using ObjectPrinting.Extensions;
using ObjectPrinting.Tests.TestObjects;

namespace ObjectPrinting.Tests

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Тесты должны проверять всю строку целиком, а не ее части
  2. Нет теста на одновременный набор всех требований. Вдруг все вместе они не работают корректно?
  3. Тесты не покрывают все примитивные и другие типы. Аналогично по другим видам требований - по ним проверяется лишь один кейс, тогда как нужно доказать, что работает хотя бы для большинства

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переписал с использованием Verify.NUnit, добавил тестов

{
[TestFixture]
public class ObjectPrinterAcceptanceTests
{
private static readonly VerifySettings settings = new();

[SetUp]
public void SetUp()
{
settings.UseDirectory("TestResults");
}

[Test]
public Task TestObjectPrinter_ExcludingTypes_CustomSerialization_Culture_Trimming()
{
var person = new PrintingTestObject {TestString = "Alex", TestInt = 19};
person.TestObject = person;

var printer = ObjectPrinter.For<PrintingTestObject>()
.Excluding<Guid>()
.Printing<int>().Using(i => i.ToString("X"))
.Printing<double>().Using(CultureInfo.InvariantCulture)
.Printing(p => p.TestString).TrimmedToLength(10)
.Excluding(p => p.TestInt);

var printedString = printer.PrintToString(person);

return Verify(printedString, settings);
}

[Test]
public Task TestDefaultSerialization_ExtensionMethod()
{
var person = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = person.PrintToString();

return Verify(printedString, settings);
}

[Test]
public Task TestConfiguredSerialization_ExtensionMethod()
{
var person = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = person.PrintToString(s => s.Excluding(p => p.TestString));

return Verify(printedString, settings);
}

[Test]
public Task PrintNull_Should_NullString()
{
var printedString = ObjectPrinter.For<PrintingTestObject>().PrintToString(null);

return Verify(printedString, settings);
}

[Test]
public Task ExcludingProperty_Should_IgnoresSpecifiedProperty()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Excluding(o => o.TestInt)
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task ExcludingType_Should_IgnoresSpecifiedType()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Excluding<string>()
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task UsingCustomSerialization_Should_AppliesCustomFunction()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Printing(x => x.TestInt).Using(x => $"{x} years")
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task UsingCustomSerializationForType_Should_AppliesCustomFunctionToAllTypeProperties()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Printing<int>().Using(x => $"{x} is int")
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task UsingCommonCulture_Should_UsesSpecifiedCulture()
{
const double testDouble = 1.5;
const float testFloat = 2.5f;
var culture = CultureInfo.GetCultureInfo("en-US");
var testObject = new PrintingTestObject {TestDouble = testDouble, TestFloat = testFloat};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.UsingCommonCulture(culture)
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task UsingCultureForType_Should_UsesSpecifiedCultureForSpecifiedType()
{
const double testDouble = 1.5;
const float testFloat = 2.5f;
var culture = CultureInfo.GetCultureInfo("en-Us");
var testObject = new PrintingTestObject {TestDouble = testDouble, TestFloat = testFloat};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Printing<double>().Using(culture)
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task TrimmingStringLength_Should_TrimsToStringLength()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Printing(o => o.TestString).TrimmedToLength(1)
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
[TestCase("Alex", 4, TestName = "LenEqualsStringLength")]
[TestCase("Alex", 5, TestName = "LenMoreStringLength")]
public Task TrimmingStringLength_Should_NotTrims(string testString, int maxLength)
{
var testObject = new PrintingTestObject {TestString = testString, TestInt = 19};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.Printing(o => o.TestString).TrimmedToLength(maxLength)
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task PrintCircularReference_Should_PrintsMessage()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};
testObject.TestObject = testObject;

var printedString = ObjectPrinter.For<PrintingTestObject>()
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task PrintNonCircularReference_Should_PrintsNormally()
{
var firstTestObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};
var secondTestObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};
firstTestObject.TestObject = secondTestObject;

var printedString = ObjectPrinter.For<PrintingTestObject>()
.PrintToString(firstTestObject);

return Verify(printedString, settings);
}

[Test]
public Task PrintArray_Should_AllItems()
{
var testObject = new PrintingTestObject
{
TestString = "Alex",
TestInt = 19,
TestArray = ["Item1", "Item2", "Item3"]
};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task PrintList_Should_AllItems()
{
var testList = new List<object> {"ListItem1", "ListItem2", "ListItem3"};
var testObject = new PrintingTestObject
{
TestString = "Alex",
TestInt = 19,
TestList = testList
};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task PrintDictionary_Should_AllItemsWithKeys()
{
var testDictionary = new Dictionary<string, object>
{
{"Key1", 1},
{"Key2", 2},
{"Key3", 3}
};
var testObject = new PrintingTestObject
{
TestString = "Alex",
TestInt = 19,
TestDictionary = testDictionary
};

var printedString = ObjectPrinter.For<PrintingTestObject>()
.PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task TestPrimitiveTypes()
{
var testObject = new PrimitiveTypesTestObject
{
BoolValue = true,
ByteValue = 255,
ShortValue = 32767,
IntValue = 2147483647,
LongValue = 9223372036854775807,
DecimalValue = 123.45m,
DoubleValue = 123.45,
FloatValue = 123.45f,
CharValue = 'A',
};

var printedString = ObjectPrinter.For<PrimitiveTypesTestObject>().PrintToString(testObject);

return Verify(printedString, settings);
}

[Test]
public Task PrintCircularReference_Should_HandleMultipleReferences()
{
var testObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};
var otherObject = new PrintingTestObject {TestString = "Alex", TestInt = 19};
testObject.TestObject = otherObject;
otherObject.TestObject = testObject;

var printedString = ObjectPrinter.For<PrintingTestObject>().PrintToString(testObject);

return Verify(printedString, settings);
}
}
}
31 changes: 31 additions & 0 deletions ObjectPrinting.Tests/ObjectPrinting.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="NUnit" Version="4.2.2" />
<PackageReference Include="NUnit.Analyzers" Version="4.4.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="Verify.NUnit" Version="28.4.0" />
</ItemGroup>

<ItemGroup>
<Using Include="NUnit.Framework"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ObjectPrinting\ObjectPrinting.csproj" />
</ItemGroup>

</Project>
14 changes: 14 additions & 0 deletions ObjectPrinting.Tests/TestObjects/PrimitiveTypesTestObject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace ObjectPrinting.Tests.TestObjects;

public class PrimitiveTypesTestObject
{
public bool BoolValue { get; set; }
public byte ByteValue { get; set; }
public short ShortValue { get; set; }
public int IntValue { get; set; }
public double DoubleValue { get; set; }
public double FloatValue { get; set; }
public long LongValue { get; set; }
public decimal DecimalValue { get; set; }
public char CharValue { get; set; }
}
14 changes: 14 additions & 0 deletions ObjectPrinting.Tests/TestObjects/PrintingTestObject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace ObjectPrinting.Tests.TestObjects;

public class PrintingTestObject
{
public Guid TestId { get; set; }
public string TestString { get; set; }
public double TestDouble { get; set; }
public float TestFloat { get; set; }
public int TestInt { get; set; }
public object TestObject { get; set; }
public Dictionary<string, object> TestDictionary { get; set; }
public List<object> TestList { get; set; }
public object[] TestArray { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PrintingTestObject
TestId = 00000000-0000-0000-0000-000000000000
TestString = Alex
TestDouble = 0
TestFloat = 0
TestObject = null
TestDictionary = null
TestList = null
TestArray = null
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PrintingTestObject
TestId = 00000000-0000-0000-0000-000000000000
TestDouble = 0
TestFloat = 0
TestInt = 19
TestObject = null
TestDictionary = null
TestList = null
TestArray = null
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
PrintingTestObject
TestId = 00000000-0000-0000-0000-000000000000
TestString = Alex
TestDouble = 0
TestFloat = 0
TestInt = 19
TestObject = null
TestDictionary = null
TestList = null
TestArray =
[
Item1
Item2
Item3
]
Loading