Comments (3)
Hey @Djerys!
Our approach usually is to base ports testing on:
Both use HTTP clients to call real endpoints, so they test the ports layer among other things as well.
It depends on the project though. If you look at trainings
http handlers there's very little logic there (and that's the way we want it). The layer just unmarshals the JSON request, maps it to the application command, and marshals the JSON response, if any.
You could argue that we don't test that the mapping is correct. So we could add mocks for the application layer and assert that the function was executed with correct parameters. But then we would basically just repeat the same code twice, and it would need to be updated every time someone changes the application handler. Tests like these don't give you much value, and are pain to deal with, so we avoid them most of the time.
Of course, you could also have longer handlers, that don't have any application logic, but some port-specific complex scenarios (things like authentication, doing something based on HTTP headers, HTTP cache, and so on). In that case, I think it's perfectly reasonable to add unit tests checking this code, preferably extracted to a separate function, so you don't need to deal with the http.HandlerFunc
interface.
If you really need to test the entire handler, httptest
provides quite nice tooling for it, so at least you don't need to spin up an HTTP server.
I hope this helps. I'm happy to hear you like the project! :)
from wild-workouts-go-ddd-example.
Oh, one more thing. Because we generate REST routes and request/response JSON models out of the OpenAPI definition, we don't need to worry about any mistakes there. You just need to make sure the YAML definition is correct, and all the rest should work out of the box.
from wild-workouts-go-ddd-example.
Thank you for your reply!
from wild-workouts-go-ddd-example.
Related Issues (20)
- Not able to run code with the Docker-Compose method HOT 1
- Authorization in repository? HOT 4
- Saving Aggregate with entity list HOT 3
- Authorization/permissions for single domain's struct fields HOT 2
- Application add query services
- The power of generics in go for the repository pattern? HOT 1
- How should OpenTelemetry fit into this example? HOT 1
- Failed to create shim task: OCI runtime create failed HOT 7
- Can we use a pointer for Repository assignment? HOT 3
- How would you transform this architecture into Microservices? HOT 2
- Web frontend upgrade to vue3 and python3
- v1.0 Web Service Breaking Due to Outdated Packages
- External validation against rule: Always Keep a Valid State in the Memory HOT 2
- Htmx HOT 2
- Guidelines for starting afresh HOT 2
- How to re-arrange oapi-codegen based petstore example using the Repository Pattern? HOT 2
- deleted
- Wrapper for pure GET without any parameters HOT 2
- Trying to understand the code: where can I find the routing info HOT 1
- Incorrect Mounting in `RunHTTPServerOnAddr` can Lead to Infinite Loop
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wild-workouts-go-ddd-example.