Skip to content

Project Template for Banking Kata, mob/practice branch with Llewelyn Falco

License

Notifications You must be signed in to change notification settings

ondjuric/BankingKata

Repository files navigation

Starter Template for new .NET Projects

This repository provides a starter template for new C# projects.

Development

What is inside?

  • DotnetStarter.Logic - is a DLL project for business logic
  • DotnetStarter.Logic.Tests - is the corresponding xUnit test project, configured with static code rules allowing underscores in test names (GlobalSuppressions.cs)

Prerequisites

To compile, test and run this project the latest .NET Core SDK is required on your machine. For calculating code metrics I recommend metrix++. This requires python.

If you are interested in test coverage, then you'll need the following tools installed:

dotnet tool install --global coverlet.console --configfile NuGet-OfficialOnly.config
dotnet tool install --global dotnet-reportgenerator-globaltool --configfile NuGet-OfficialOnly.config

Build, Test, Run

Run the following commands from the folder containing the .sln file in order to build and test.

Build the Solution and Run the Tests

dotnet build
dotnet test

# If you like continuous testing then use the dotnet file watcher to trigger your tests
dotnet watch --project ./DotnetStarter.Logic.Tests test

# As an alternative, run the tests with coverage and produce a coverage report
rm -r DotnetStarter.Logic.Tests/TestResults && \
  dotnet test --no-restore --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput='./TestResults/coverage.cobertura.xml' && \
  reportgenerator "-reports:DotnetStarter.Logic.Tests/TestResults/*.xml" "-targetdir:report" "-reporttypes:Html;lcov" "-title:DotnetStarter"
open report/index.html

Apply code formatting rules

dotnet format

Check Code Metrics

... check code metrics using metrix++

  • Configure the location of the cloned metrix++ scripts

    export METRIXPP=/path/to/metrixplusplus
  • Collect metrics

    python "$METRIXPP/metrix++.py" collect --std.code.complexity.cyclomatic --std.code.lines.code --std.code.todo.comments --std.code.maintindex.simple -- .
  • Get an overview

    python "$METRIXPP/metrix++.py" view --db-file=./metrixpp.db
  • Apply thresholds

    python "$METRIXPP/metrix++.py" limit --db-file=./metrixpp.db --max-limit=std.code.complexity:cyclomatic:5 --max-limit=std.code.lines:code:25:function --max-limit=std.code.todo:comments:0 --max-limit=std.code.mi:simple:1

At the time of writing, I want to stay below the following thresholds:

--max-limit=std.code.complexity:cyclomatic:5
--max-limit=std.code.lines:code:25:function
--max-limit=std.code.todo:comments:0
--max-limit=std.code.mi:simple:1

Remove Code Duplication Where Appropriate

To detect duplicates I use the CPD Copy Paste Detector tool from the PMD Source Code Analyzer Project.

If you have installed PMD by download & unzip, replace pmd by ./run.sh. The homebrew pmd formula makes the pmd command globally available.

pmd cpd --minimum-tokens 50 --language cs --files .

About

Project Template for Banking Kata, mob/practice branch with Llewelyn Falco

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages