Giter Site home page Giter Site logo

kotlincliappskeleton's Introduction

A simple skeleton CLI

I made this sample github repo to show how to make a simple CLI using kotlin and picocli.

It includes an ApplicationEnvironment (Manual DI Container), an action handler, and a single command with some CLI options

The main idea is to provide multiple handlers as part of a transformation pipeline to get to the final result, each handler also has to be provided of required arguments (as data classes) and services (that are hosted in the ApplicationEnvironment)

This allows the handlers to be tested in isolation, and the application to be tested as a whole.

Run

./gradlew run --args="-p ./"

Tests

./gradlew test

The tests are composed of two different kind of tests.

  1. Unit tests for the handlers
  2. Integration tests for the application

The handlers are unit tested by providing them with a fake service and a specific set of parameters to control the result of the operation.

The integration tests are done by running the CLI Command in question with a fake ApplicationEnvironment with a set of specific arguments.

Since CLI applications are often working with stdin/stdout, to ease testing your outputs you should provide a logger interface so you can fake it in your tests and corroborate that what you're logging to the console is what you actually want.

kotlincliappskeleton's People

Contributors

angelmunoz avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.