I see two options.
>Test setting up the entire system and exercise from the outer edge.
>Each work piece is individually carried out end-to-end Test, rely on the test content to enforce the agreement between them.
Is there a clear case that just insists on one of them, or is one of the first choices, or is it interchangeable? If they are interchangeable, what are the advantages and disadvantages between them?
I like that my tests map to use cases (BDD style) as closely as possible (disclaimer I abuse the term use cases). These use cases may span multiple applications and subsystems.
Example: The background administrator can view the transactions performed by the user from the public interface.
Here, the background management interface and the public interface are different applications, but they are included in the same use case Medium.
Mapping these ideas to your problem of deploying subsystems on different hosts, I would say that from a user/role point of view, it depends on how it is used. Whether the use case spans multiple Subsystem?
In addition, the fact that the system may be deployed on multiple hosts is not important for testing. You can use method calls in the test to replace inter-process communication and put the entire system in the same process during the test , Thereby reducing complexity. Use a test that only verifies inter-process communication to supplement this.
Edit:
I realize that I forgot why I prefer to test the entire system.
Edit:
p>
Your assets are functions, that is, behavior, and code is liabilities. Therefore, you want to test behavior, not code (BDD style).
If you test each subsystem separately, then Indicates that you are testing the code, not the function. Why? When you divide the system into subsystems, do so for certain technical reasons. When you learn more, you may find that the selected seams are in a sub-optimal state and want to transfer some of the responsibilities from one subsystem To another subsystem. And you must modify the test and production code at the same time, so that you do not have a safety net. This is a typical symptom of testing implementation details.
In other words, these tests are too rigid to test Everything. Therefore, you need to perform supplementary testing on the details when necessary.
End-to-end testing means executing the application from the external boundary to verify its behavior. So far , I only performed a written test on a single executable artifact. How should I test a system composed of multiple artifacts deployed on different hosts?
I see two options.
>Test setting up the entire system and exercise from the outer edge.
>Each work piece is individually carried out end-to-end Test, rely on the test content to enforce the agreement between them.
Is there a clear case that just insists on one of them, or is one of the first choices, or is it interchangeable? If they are interchangeable, what are the advantages and disadvantages between them?
Although I think it depends on the background, I prefer the first option. This is my random thought:
< p>I like my tests to map to use cases (BDD style) as closely as possible (disclaimer I abuse the term use cases). These use cases may span multiple applications and subsystems.
Example: Backend administrator You can view the transactions performed by the user from the public interface.
Here, the background management interface and the public interface are different applications, but they are included in the same use case.
Combine these ideas Mapping to your question of deploying subsystems on different hosts, I would say that from a user/role point of view, it depends on how it is used. Does the use case span multiple subsystems?
In addition, the fact that the system may be deployed on multiple hosts is not important for testing. You can use method calls in the test to replace inter-process communication and put the entire system in the same process during the test , Thereby reducing complexity. Supplement this with tests that only verify inter-process communication.
Edit:
I realize I forgot why I prefer to test the entire system.
Edit:
p>
Your asset is a function, that is, behavior, and code is a liability. Therefore, you want to test behavior, not code (BDD style).
If you test each subsystem separately, then Indicates that you are testing the code, not the function. Why? When you divide the system into subsystems, do so for certain technical reasons. When you learn more, you may find that the selected seams are in a sub-optimal state and want to transfer some of the responsibilities from one subsystem To another subsystem. And you must modify the test and production code at the same time, so that you do not have a safety net. This is a typical symptom of testing implementation details.
In other words, these tests are too rigid to test Everything. Therefore, you need to test the details when necessary.