Тестирование. Тесты как спецификация

Содержание

Слайд 2

Будет ли тест понятен ревьюеру?
Можно ли быстро убедиться в корректности теста?
Можно ли

Будет ли тест понятен ревьюеру? Можно ли быстро убедиться в корректности теста?
быстро понять, что он проверяет?

ДОВЕРИЕ ТЕСТАМ

Слайд 3

[TestFixture]
public class Superman_Should
{
[Test]
public void SaveKittenFromTree()
{
… superman.Act();
Assert.That(kitten.IsSaved());
}
[Test]
public void WearRedBlueSuit_WhenAtWork()
{
… }

}

ТЕСТЫ КАК СПЕЦИФИКАЦИЯ

[TestFixture] public class Superman_Should { [Test] public void SaveKittenFromTree() { … superman.Act();

Слайд 4

[TestFixture]
public class Superman_Should
{
[Test]
public void SaveKittenFromTree()
{…}
[Test]
public void WearRedBlueSuit_WhenAtWork()
{…}
}

ТЕСТЫ КАК СПЕЦИФИКАЦИЯ

[TestFixture] public class Superman_Should { [Test] public void SaveKittenFromTree() {…} [Test] public

Слайд 5

System Under Test имя класса, имя метода
Условия вход, состояние
Результат ожидаемое поведение или требования для

System Under Test имя класса, имя метода Условия вход, состояние Результат ожидаемое
проверки

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

http://java.dzone.com/articles/7-popular-unit-test-naming

ЧТО ДОЛЖНО БЫТЬ В ИМЕНИ ТЕСТА?

Слайд 6

ParserTests.TestParse
ParserTests.Parse_Fails
ParserTests.Parse_BigNumbers
ParserTests.Parse_NumbersGreaterThanMaxInt
ParserTests.Fails_OnNegativeNumbers

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

ParserTests.TestParse ParserTests.Parse_Fails ParserTests.Parse_BigNumbers ParserTests.Parse_NumbersGreaterThanMaxInt ParserTests.Fails_OnNegativeNumbers ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

Слайд 7

IsAdult_AgeLessThan18_False
ParseInt_Should.Fails_OnNonNumber
Stack_Should.BeEmpty_AfterCreation
When_MandatoryFieldsAreMissing_Expect_StudentAdmissionToFail

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

IsAdult_AgeLessThan18_False ParseInt_Should.Fails_OnNonNumber Stack_Should.BeEmpty_AfterCreation When_MandatoryFieldsAreMissing_Expect_StudentAdmissionToFail ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

Слайд 8

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

Слайд 9

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

ИМЯ ТЕСТА КАК СПЕЦИФИКАЦИЯ

Слайд 10

Arrange
Act
Assert

ПРАВИЛЬНАЯ СТРУКТУРА ТЕСТА

Arrange Act Assert ПРАВИЛЬНАЯ СТРУКТУРА ТЕСТА

Слайд 11

АНТИПАТТЕРНЫ

https://habr.com/post/43761/

АНТИПАТТЕРНЫ https://habr.com/post/43761/

Слайд 12

ПОЧЕМУ НЕ ВСЕ ПИШУТ ТЕСТЫ?

ПОЧЕМУ НЕ ВСЕ ПИШУТ ТЕСТЫ?

Слайд 13

ПИШЕМ ТЕСТЫ ЛЕГКО

ТЕСТ НАПИСАТЬ – КАК ЧАЙ ПОПИТЬ

ПИШЕМ ТЕСТЫ ЛЕГКО ТЕСТ НАПИСАТЬ – КАК ЧАЙ ПОПИТЬ

Слайд 14

БОРЬБА С ДУБЛИРОВАНИЕМ

БОРЬБА С ДУБЛИРОВАНИЕМ

Слайд 15

СБОРКА И РАЗБОРКА ОКРУЖЕНИЯ

[OneTimeSetUp|OneTimeTearDown]
[SetUp|TearDown]

СБОРКА И РАЗБОРКА ОКРУЖЕНИЯ [OneTimeSetUp|OneTimeTearDown] [SetUp|TearDown]

Слайд 16

[TestFixture]
public class Mailbox_Should
{
private Mailbox mailbox;
[SetUp]
public void SetUp() { mailbox

[TestFixture] public class Mailbox_Should { private Mailbox mailbox; [SetUp] public void SetUp()
= new Mailbox(); }
...
[TearDown]
public void TearDown() { mailbox.Dispose(); }
}

SETUP & TEARDOWN

Слайд 17

OBJECT MOTHER & TEST DATA BUILDER

OBJECT MOTHER & TEST DATA BUILDER

Слайд 18

PARAMETRIZED TESTS

ОНИ ЖЕ DATA DRIVEN

PARAMETRIZED TESTS ОНИ ЖЕ DATA DRIVEN

Слайд 19

ДОПОЛНИТЕЛЬНЫЕ ТРЮКИ

ДОПОЛНИТЕЛЬНЫЕ ТРЮКИ

Слайд 20

Assert.AreEqual(expected, actual)
VS Assert.AreEqual(actual, expected)
Assert.That(2+2, Is.EqualTo(4))
Assert.That(x, IResolveConstraint)

ASSERT

// O_o ?!?

Assert.AreEqual(expected, actual) VS Assert.AreEqual(actual, expected) Assert.That(2+2, Is.EqualTo(4)) Assert.That(x, IResolveConstraint) ASSERT // O_o ?!?

Слайд 21

(2+2).Should().Be(4) flag.Should().BeTrue()
new[] {1,2,3} .Should().AllBeEquivalentTo(new [] {3,2,1});
new[] {1,2,3} .Should().AllBeEquivalentTo( new [] {1,2,3}, options => options.WithStrictOrdering());

SHOULD

FluentAssertions доступна

(2+2).Should().Be(4) flag.Should().BeTrue() new[] {1,2,3} .Should().AllBeEquivalentTo(new [] {3,2,1}); new[] {1,2,3} .Should().AllBeEquivalentTo( new []
через NuGet

Слайд 22

Action action = () => { var z = x / y;

Action action = () => { var z = x / y;
};
action.ShouldThrow();

ОЖИДАНИЕ ИСКЛЮЧЕНИЯ

Слайд 23

[Test, Timeout(1000)]
public void ShouldDoInTimeout()
{

}

ОГРАНИЧЕНИЕ ПО ВРЕМЕНИ

[Test, Timeout(1000)] public void ShouldDoInTimeout() { … } ОГРАНИЧЕНИЕ ПО ВРЕМЕНИ

Слайд 24

[Test, Category("Smokie")]
public void Test()
{

}

ВЫБОР ТЕСТОВ ДЛЯ ПРОГОНА

[Test, Category("Smokie")] public void Test() { … } ВЫБОР ТЕСТОВ ДЛЯ ПРОГОНА

Слайд 25

LIVE TEMPLATES

Resharper → Tools → Templates Explorer
Import tests-templates.DotSettings
tf — TestFixture
tt — Test
su —

LIVE TEMPLATES Resharper → Tools → Templates Explorer Import tests-templates.DotSettings tf —
SetUp
td — TearDown

Слайд 26

HOTKEYS

Ctrl+T+R
Ctrl+U+R

HOTKEYS Ctrl+T+R Ctrl+U+R

Слайд 27

CHALLENGE

CHALLENGE

Слайд 28

WordsStatistics
WordStatisticsXXX
Ctrl+F5

CHALLENGE

WordsStatistics WordStatisticsXXX Ctrl+F5 CHALLENGE

Слайд 29

Тесты по спецификации — это просто
Как взаимодействуют разные пункты спецификации?

CHALLENGE

РАЗБОР

Тесты по спецификации — это просто Как взаимодействуют разные пункты спецификации? CHALLENGE РАЗБОР

Слайд 30

Важен не только результат, но и время выполнения

CHALLENGE

РАЗБОР

Важен не только результат, но и время выполнения CHALLENGE РАЗБОР

Слайд 31

Тесты не заменяют Code Review
Code Review не заменяет тесты

CHALLENGE

РАЗБОР

Тесты не заменяют Code Review Code Review не заменяет тесты CHALLENGE РАЗБОР
Имя файла: Тестирование.-Тесты-как-спецификация.pptx
Количество просмотров: 27
Количество скачиваний: 0