{"id":32430636,"url":"https://github.com/novikov-school/nspectator","last_synced_at":"2026-04-01T23:34:51.799Z","repository":{"id":90354735,"uuid":"54739401","full_name":"novikov-school/NSpectator","owner":"novikov-school","description":"Agile development with .NET code specifications","archived":false,"fork":false,"pushed_at":"2018-03-29T19:54:52.000Z","size":44697,"stargazers_count":25,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-25T21:28:46.980Z","etag":null,"topics":["agile","cucumber","jetbrains","ndepend","nspec","nunit","rspec","testing","xspec-family"],"latest_commit_sha":null,"homepage":"http://nspectator.org","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novikov-school.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-03-25T18:40:50.000Z","updated_at":"2025-10-17T09:11:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"8889c2b0-91c9-4b57-a292-012aa4653f35","html_url":"https://github.com/novikov-school/NSpectator","commit_stats":null,"previous_names":["nspectator/nspectator"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/novikov-school/NSpectator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novikov-school%2FNSpectator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novikov-school%2FNSpectator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novikov-school%2FNSpectator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novikov-school%2FNSpectator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novikov-school","download_url":"https://codeload.github.com/novikov-school/NSpectator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novikov-school%2FNSpectator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284082416,"owners_count":26944298,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-12T02:00:06.336Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agile","cucumber","jetbrains","ndepend","nspec","nunit","rspec","testing","xspec-family"],"created_at":"2025-10-25T21:18:39.654Z","updated_at":"2025-11-12T18:01:00.826Z","avatar_url":"https://github.com/novikov-school.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NSpectator\n\n[![Join the chat at https://gitter.im/nspectator/NSpectator](https://badges.gitter.im/nspectator/NSpectator.svg)](https://gitter.im/nspectator/NSpectator?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![NuGet version (NSpectator)](https://img.shields.io/nuget/v/NSpectator.svg?style=flat)](https://www.nuget.org/packages/NSpectator/)\n[![Build Status](https://travis-ci.org/nspectator/NSpectator.svg?branch=master)](https://travis-ci.org/nspectator/NSpectator)\n[![Dependencies status](https://img.shields.io/badge/dependencies-up--to--date-brightgreen.svg)](https://libraries.io/nuget/NSpectator)\n[![Youtrack](https://img.shields.io/badge/issues-youtrack-orange.svg)](https://nspectator.myjetbrains.com/youtrack/issues/NS?q=%23Unresolved)\n[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/nspectator/NSpectator/master/license.txt)\n\n\nNSpectator is ready-to-use solution for development using .NET with Context/Specification flavor. It can be used in different approaches where Specification-By-Example is applicable, including TDD, ATDD, BDD or another agile technics. Toolset is intended to be used to drive development through specifying behavior and interaction at the unit level. \nNSpectator has only one dependency on popular flexible [FluentAssertions](https://github.com/dennisdoomen/fluentassertions) library. It`s important not to depend on specific unit test framework.\n\nDevelopment was started by [Jonny Novikov](http://jonnynovikov.com) inspired by [RSpec](http://rspec.info/) and based upon hereditary framework [NSpec](https://github.com/mattflo/NSpec) written by [Matt Florence](http://twitter.com/mattflo) and [Amir Rajan](http://twitter.com/amirrajan). We shaped and benefited by hard work from our [contributors](https://github.com/nspectator/NSpectator/contributors)\n\n# Installation\n\nWe recommended installing [the NuGet package](https://www.nuget.org/packages/NSpectator). Install on the command line from your solution directory or use the Package Manager console in Visual Studio:\n\n```powershell\n\nPM\u003e Install-Package NSpectator\n\n```\n\n## Additional info\n\n### Execution order\n\nPlease have a look at [this wiki page](https://github.com/nspectator/NSpectator/wiki/Execution-Orders) for an overview on which test hooks are executed when: execution order in xSpec family frameworks can get tricky when dealing with more complicated test configurations, like inherithing from an abstract test class or mixing `before_each` with `before_all` at different context levels.\n\n### Data-driven test cases\n\nTest frameworks of the xUnit family have dedicated attributes in order to support data-driven test cases (so-called *theories*). NSpectator, as a member of the xSpec family, does not make use of attributes and instead obtains the same result with a set of expectations automatically created through code. In detail, to set up a data-driven test case with NSpectator you just: \n\n1. build a set of data points;\n1. name and assign an expectation for each data point by looping though the whole set.\n\nAny NSpectator runner will be able to detect all the (aptly) named expectations and run them. Here you can see a sample test case, where we took advantage of `NSpectator.Each\u003c\u003e` class and `NSpectator.Do()` extension to work more easily with data point enumeration, and `NSpectator.With()` extension to have an easier time composing text:\n\n```c#\nclass Describe_prime_factors : Spec\n{\n  void Given_first_ten_integer_numbers()\n  {\n      new Each\u003cint, int[]\u003e\n      {\n          { 0, new int[] { } },\n          { 1, new int[] { } },\n          { 2, new[] { 2 } },\n          { 3, new[] { 3 } },\n          { 4, new[] { 2, 2 } },\n          { 5, new[] { 5 } },\n          { 6, new[] { 2, 3 } },\n          { 7, new[] { 7 } },\n          { 8, new[] { 2, 2, 2 } },\n          { 9, new[] { 3, 3 } },\n\n      }.Do((given, expected) =\u003e\n          it[$\"{given} should be {expected}\"] = () =\u003e given.Primes().Should().Be(expected)\n      );\n  }\n}\n```\n\n### Samples\n\nTake a look at separate [Katas repository](https://github.com/nspectator/katas)\n\n## Contributing\n\nCheck out [this wiki page](https://github.com/nspectator/NSpectator/wiki/Contributing) for complete guide.\n\n### Issues\n\nFeature requests, bugs \u0026 issues are handled on [NSpectator Youtrack InCloud](https://nspectator.myjetbrains.com/youtrack/issues/NS?q=%23Unresolved)\n\nUse github authorization (gray bottom button) for signup or login.\n\n## :scroll: License\n\n[MIT](http://showalicense.com/?fullname=NSpectator%20Development%20Team\u0026year=2016#license-mit) © [NSpectator Development Team](http://nspectator.org)\n\n## :thumbsup: Thanks to\n\n[Jetbrains](https://www.jetbrains.com/) Community Support for providing great tools for NSpectator Development Team\n\n[NDepend](http://www.ndepend.com/) for providing our team ultimate tool for deep code analysis\n\n[![NDepend](https://github.com/nspectator/nspectator/raw/master/tools/PoweredByNDepend.png)](http://www.ndepend.com/)\n[![Jetbrains Resharper](https://github.com/nspectator/nspectator/raw/master/tools/icon_ReSharper.png)](https://www.jetbrains.com/resharper/)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovikov-school%2Fnspectator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovikov-school%2Fnspectator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovikov-school%2Fnspectator/lists"}