
Compare integration, ui, and acceptance testing, and learn how developers translate business requirements into tests using tdd, specflow, selenium, and teststack white.
Identify and compare unit, integration, and acceptance tests, explain test doubles and the test pyramid, and show how TDD applies across these test types.
Explore the test pyramid, emphasizing unit, integration, and acceptance tests, and learn how UI tests function as integration tests that drive the application through automated UI actions with assertions.
Explore why integration tests are essential in large systems, contrast with unit tests, and learn when end-to-end tests reveal external behavior and system interactions.
Discover why automated UI tests matter, delivering end-to-end coverage, catching UI glitches, and speeding feedback across browsers while freeing manual testers for exploratory work.
Acceptance tests are business readable automated tests written in natural language that bridge domain experts and developers, providing executable documentation of features and usage backed by spec flow.
Compare Selenium, Visual Studio Coded UI Test, and Test Stack White for web and desktop UI testing, highlighting record-and-replay versus manual coding, and show Selenium for web and WPF testing.
Learn the three major test types—unit, integration, and acceptance—and how user interface tests fit; recognize integration tests are brittle yet essential for whole-system validation with Selenium and spec flow.
Explore SpecFlow and Gherkin to create business readable tests, compare BDD and ATDD approaches, and learn the basic features and workflow of SpecFlow.
Use SpecFlow to write high level, business readable automated tests in natural language that verify system correctness and bridge the gap between developers and domain experts, via executable acceptance tests.
Compare BDD and ATDD, showing how behavior-driven development uses conversations and automation to deliver what the business wants, with ATDD as a technique used within BDD.
Explore SpecFlow workflows for writing scenarios before or after production code, and how this enhances communication between developers and domain experts; learn when domain experts should contribute to acceptance tests.
Explore how SpecFlow enables acceptance tests with Gherkin feature files, generates executable C# code from features, binds scenarios to steps, and promotes reusable, maintainable test definitions.
Explore gherkin's business readable syntax for behavior descriptions, detailing features, scenarios, and given/when/then steps, and apply best practices for high-level, non-technical acceptance tests with SpecFlow.
Learn the basics of acceptance testing with SpecFlow by setting up the environment, installing the Visual Studio extension, and creating an acceptance tests project.
Explore two approaches to acceptance tests: ui-driven end-to-end tests versus tests through high level system interfaces, weighing brittleness, maintainability, and business coverage.
SpecFlow enables building the right thing within behavior-driven development. Learn how atd fits into acceptance tests with given-when-then in Gherkin, and the arrange-act-assert pattern, plus installation steps for SpecFlow extensions.
Explore SpaC flow in detail to write maintainable acceptance tests, covering step generation, running and debugging, data tables, scenario outlines, backgrounds, parameter passing, conversions, sharing data, tags, and hooks.
Learn to generate step definitions for SpecFlow features, switch naming styles (regular expression, underscores, and PascalCase), preview code, and copy methods to bind steps.
Explore the main features of specflow through a simple character class example in C#, including enum types and health calculations. Write acceptance tests to demonstrate specflow's major features.
Create a SpecFlow feature file for acceptance tests, describe a game health scenario, and implement steps to verify that a new character's health remains 100 after zero damage.
Run and debug acceptance tests as regular unit tests using test explorer, with breakpoints in generated steps or feature files, and verify behavior by running and failing tests.
Add and implement new specflow scenarios for a game character, validating armor-based health reduction from 60 to 50 and death on a 110 hit, with step definitions and tests.
Learn to pass parameters in SpecFlow tests with Selenium WebDriver C# by refactoring to remove duplication, using placeholders, and supporting underscore and Pascal casing styles.
Explore scenario outline in specflow to reduce duplication by running the same given-when-then scenario with different data via an examples table.
Enhance the character class with a spell enum and a defense calculation, and learn to pass data tables in SpecFlow by binding rows to enum values.
Explore converting step parameters to enumeration in SpecFlow with C#. Make steps explicit by declaring the type, adjust regex, and pass the enumeration as an argument; tests confirm custom conversions.
Remove weak typing by creating a dedicated class for table values, and explore a dynamic alternative to handle tables in SpecFlow with proper enum parsing.
Learn to convert tables into sets in specflow by using create set for data or create dynamic set for untyped data, then populate a character's weapon list and validate results.
Explore SpecFlow's custom conversions by implementing an int-to-date time transformation and a step argument transformation, then apply it to a hungry character scenario with three days' double damage.
Discover how to share data between steps in spec flow using context injection with a strongly typed character context and its health property, avoiding thread safety issues.
Categorize tests in spec flow with tags, group by traits in Visual Studio, and run long running or ignored tests using ignore and long running tags to differentiate business tests.
Apply scope attributes to feature, scenario, or tag to differentiate the same step and avoid ambiguous step definitions, while logging current scenario info.
Explore acceptance test driven development with scope bindings to manage tests by tags. Create scoped bindings to mark awaiting review tests so the rest pass.
Explain how spec flow hooks use before and after attributes to run code at precise moments, including before test run, before feature, before scenario, before scenario block, and before step.
Learn how to implement hooks in SpecFlow with C#, using an after scenario teardown and the IDisposable interface to manage object lifecycles, and tagging for scoped hook execution.
Explore how to optimize acceptance testing with spec flow and Selenium in C#, including scenario outlines, data tables, bindings, hooks, scenario background, type conversion, and tagged, scoped test execution.
Selenium automates web browsers to simulate human interactions such as clicking, typing, and selecting, using Selenium IDE or WebDriver. Focus on WebDriver with C# and Chrome, explaining components and capabilities.
Explore the core features of selenium and learn to locate and manipulate web elements, building foundational skills to automate basic scenarios on a practice site.
Set up a Selenium WebDriver in a C# console app, install the Selenium WebDriver Chrome Driver, instantiate the driver, navigate to a page, and click a button by id.
Discover how to locate web elements in Selenium using eight locator types—id, name, class name, tag name, link text, partial link text, CSS selector, and XPath—through practical Visual Studio examples.
Explore the basics of XPath selectors for locating elements in the DOM, compare them with CSS selectors, and learn how to build both relative and absolute paths in Selenium.
Explore CSS selectors in Selenium WebDriver to locate elements by name, class, and id, using full and short forms, and handle spaces in class names for accurate matches.
Learn to interact with input elements, checkboxes, radio buttons, and drop-downs using Selenium WebDriver in C#, locating elements by CSS selectors and id, and using the select element for options.
Modern, complex websites such as amazon challenge selenium with dynamic UI states and delayed elements. Learn to handle element availability, dynamic declarations, and tricky clicks.
Explore how implicit and explicit timeouts synchronize your Selenium tests with the application under test, balancing default driver behavior and explicit waits to handle dynamic web pages.
Use the official locator priority: id, name, link text, partial link text, tag name, class name, CSS, and XPath. Prefer id for speed and uniqueness; avoid XPath in most cases.
Choose practical UI test scenarios that protect reputation, data integrity, and security, prioritizing core and killer features, with at least one smoke test per page for major functions.
Learn how SpecFlow works with UI testing frameworks to automate tests using Selenium or TestStack.White, wiring steps, navigating pages, entering inputs, and asserting outcomes.
Master Selenium fundamentals—browser, driver, API, and element locators (ID, name, class, tag, link text, CSS, XPath). Apply explicit timeouts and retries with SpecFlow for high-level tests.
Automate a live website with Selenium and Specflow by signing in, uploading course files, and filling course information, using the page object pattern and a base class.
Automate a real-world website workflow to sign in, navigate to teach, start a class, and upload videos on Skillshare, filling in class details manually where needed.
Set up a new automation project for Skillshare by creating a console app, adding the video course file manager, and installing selenium web driver, chrome driver, and selenium extras.
Automate sign-in testing with selenium web driver in C# by locating login form email and password fields. Navigate to the login page, click submit, and verify sign-in succeeds.
Apply the page object design pattern with Selenium WebDriver. Create login page and class page classes using the static factory pattern for navigation to promote maintainable, isolated automation.
Enhance the page object design pattern by introducing a shared web page base class with a driver, an actions helper, and a retry mechanism using explicit timeouts to improve reliability.
Refactor a selenium c# test suite with a page object pattern, inheriting from a base web page, passing the driver, and refining login and upload course workflows.
Automate file uploads by handling OS dialogs with AutoIt or using send keys, and fill the class title while selecting category, subcategory, class type, and level.
Demonstrates automated Skillshare uploads by refactoring into separate files, using enums for course data, building a Skillshare course info class, computing URLs, and driving video uploads with autoit after login.
Apply theoretical knowledge in practice by automating web tasks with Selenium, including uploading files, handling popups, and using the page object pattern and a base class with timeouts and retries.
Learn to automate browser behavior by manipulating tabs and windows, opening new tabs and windows, adjusting size and location, and switching between and closing them across different browsers.
Develop cross-browser tests by using Firefox, Opera, Edge, and Chrome with the correct webdriver. Install and configure drivers, instantiate browser drivers, and write browser-specific logic when navigating URLs.
Adjust the browser window position with a new point and size with a new size using Selenium WebDriver by manage().window, then observe the changes.
Open new tabs and windows in Selenium using JavaScript approaches and navigate to URLs. Understand cross-browser reliability issues with WebDriver, test different methods, and learn to switch or close tabs.
Learn to open, switch between, and close browser tabs and windows. Use switch and window handles, manage timeouts, and monitor page status with JavaScript during multi-tab work.
Install required browsers and drivers and instantiate the corresponding driver, ensuring the executable is found. Use switchTo and window handles to manage tabs and close them.
Implement a true or false game to demonstrate TDD, dependency injection, and mocking in an agile workflow, with a WPF two-window app and an XML editor.
Explore a minimal MVVM WPF app with a statement class, text, boolean flag, INotifyPropertyChanged, and XML serialization. See Caliburn Micro manage views, view models, and Windsor IoC for single host.
Explore how the white framework uses UIA to locate controls via window messages, launch applications with the Application class, and handle standard UI items versus third-party and custom UI items.
Define and automate acceptance tests using SpecFlow and Gherkin in Visual Studio to model editing and playing a true or false game, generating step definitions and a UI API.
Build a bridge to user interface by applying the page object design pattern, abstracting low-level UI details with the test stack white framework and exposing clean window wrappers and actions.
Implement acceptance tests with SpecFlow and Selenium in C#, using before-scenario hooks to kill and relaunch the app and apply test-driven development to given/when steps.
Drive the implementation of view models by writing tests, binding UI with Caliburn Micro, and validating persistence interactions using in-memory mocks and a builder.
Implement a game view model with test-driven development, exposing statement text, statement number, and score, wiring a dialogue service, and validating correct and incorrect answers via unit and acceptance tests.
Master acceptance tests, high level requirements, and TDD to drive UI API wrappers, viewmodels, and core business logic through iterative, agile development with the builder pattern.
Explore the basics of unit testing, learn about test frameworks, write and run tests, and understand naming conventions, benefits, and the oath of a programmer and its relation to testing.
Learn the definition and purpose of a unit test, identify the system under test (sut), distinguish unit tests from integration tests, and note test doubles and unit testing frameworks.
Explore common unit testing frameworks, including NUnit and MSTest, and learn that once you know how to write tests in any framework, you can adapt quickly.
Create and run your first unit test in Visual Studio, using NUnit with the NUnit 3 Test Adapter, and the TestFixture, Test, and Assert to verify the serial port parsing logic.
Learn naming conventions for tests and projects, including project under test dot tests and class under test tests, plus three-part underscores using use cases, scenarios, and expected behavior.
Discover Visual Studio’s unit testing workflow, including test explorer usage, run all and run failed commands, and creating playlists to group tests. Debug tests with breakpoints and auto-run after builds.
Test the parsing method to verify correct behavior and catch unintended changes before shipping. Leverage unit tests as a safety net that boosts productivity, reduces defects, and fuels continuous integration.
Unit tests give developers a safety net and fast feedback. Write unit tests for complex apps, acknowledge manual testing helps, avoid them for hello world applications, and value professional standards.
Explore programmer responsibility and the oath, citing historic failures like Therac 25 and the MIM-104 Patriot, and emphasize unit testing and test-driven design to prove code quality.
Write unit tests for a simple stack implemented with an internal list, covering push, pop, and peek to validate the public API.
Develop unit tests for a stack class, validating isEmpty, count, push, and pop exceptions, and examining peek/peak behavior after sequences of pushes and pops.
Define a unit test as a function that calls another and checks the outcome. Learn unit under test underscore scenario naming templates and run and debug in Visual Studio.
Learn to install a unit testing framework and runner in Visual Studio, write assertions with the end unit API, apply arrange-act-assert, setup-teardown, parameterized tests, and measure code coverage.
Discover how modern unit testing uses a fluent constraint based assertion model, with is, has, and does constraints building multi-level expressions like all, not, ends with, and contains.
Demonstrate writing and running unit tests that validate a character class's properties and behaviors using assertions for strings, numerics, booleans, collections, types, ranges, and exceptions, including floating point tolerance.
Learn the three-step arrange-act-assert pattern for unit testing, including setting up the system under test, invoking methods, and verifying behavior with assertions.
Run unit tests from the console to support continuous integration, using the standalone end unit console and a DLL path, and save results to XML.
Set up and tear down of unit tests use a setup attribute to run code before each test and a tear down after each test to prevent test state leakage.
Explore setup and teardown at higher levels using setup fixtures across assemblies and namespaces, with one time setup initializing the environment before tests and one time teardown runs.
Explore parameterized tests in SpecFlow with Selenium WebDriver, refactoring to data driven unit tests using test case attribute and test case source attribute for reusable, multi-argument scenarios.
Group slow tests by traits using a category attribute and use an ignore attribute to skip broken tests; then view categories in test explorer and rebuild.
Learn code coverage as a metric of how much code unit tests cover, shown in percentages and class or method statistics in Visual Studio.
Implement the fizzbuzz function, returning 'fizz' for multiples of three, 'buzz' for five, 'fizzbuzz' for both, and empty string otherwise, then cover it with unit tests.
Uses a single unit test method decorated with multiple test case attributes to validate fizz, buzz, fizzbuzz, and empty results from the ask method in the fizzbuzz class.
Implement a roman numeral parser that handles subtractive notation and converts numerals to Arabic numbers, then prove correctness with unit tests.
Build a roman numeral parser with a private static readonly map from roman numerals to arabic values, parse by iterating chars, and add subtractive-case tests for I, V, II, IV.
Master arrange–act–assert testing with constraints and the new assertion interface, learn parameterized tests, setup and teardown, test grouping, console runs, Visual Studio coverage, and an intro to test doubles.
This course is all about growing object-oriented software guided by tests.
SpecFlow is a framework which brings Behavior-Driven Development (BDD) into life. It is all about filling the gap between technical people and domain experts. SpecFlow is based of a Gherkin language which is very close to natural (though, it is formalized). So, non-technical people can write executable documentation on their own.
Selenium is a framework which allows to drive browsers (Chrome, Firefox, Opera etc.). In other words, with the power of Selenium, you can write a program which automatically interacts with elements on a web page.
TestStack.White (sometimes, written as "teststack white") is a framework which allows to drive WinForms and WPF applications.
This course covers:
Theoretical background behind different types of testing (unit, integration, and acceptance testing)
SpecFlow: generating steps, run and debug tests, passing parameters, scenario outline, data table, converting parameters, converting data table, custom conversions, sharing data, categorizing tests, scoped execution, hooks and other features
Selenium WebDriver: Locators, XPath Locators, CSS Locators, Interacting with all the types of Elements, Timeouts: Explicit and Implicit, Locators Priority, Picking Scenarios to Test, "Page Object" design pattern, Page Object Factory, uploading files
Scraping a Live Web Site with Selenium WebDriver
Selenium Extras: managing a web browser
TestStack.White and Building a WPF App by TDD (with MVVM)
Appendixes: intro to Unit Testing and Test-Driven Development