|
| ▲ | madeofpalk 3 hours ago | parent | next [-] |
| > ASAIK the purpose of a dry-run is to understand what will happen Right - so the dry-run has to actually do as much of 'what will happen' as possible, except the actual things. You want to put the check as far down, close to the 'action' as possible. You don't want any additional business logic gated by the dry run check. |
|
| ▲ | friendzis 4 hours ago | parent | prev | next [-] |
| > ASAIK the purpose of a dry-run is to understand what will happen, not to test what will happen. For the latter we have testing. Not really. Testing is a way to increase confidence that code does what it is specified to do, because it is cheaper than full-blown formal analysis :) The problem raised by OP here is granularity. Operation like `update(record, field, value)` is itself a tree of smaller sub-operations that may do some permissions checking, locking, network calls, even checking for presence of record if it has upsert semantics, all of which could fail. A dry run with a plan that is too coarse can succeed while the actual operation fails over things left unchecked. |
|
| ▲ | xavdid 6 hours ago | parent | prev | next [-] |
| Yes, but it depends on the context. For little scripts, I'm not writing unit tests- running it is the test. But I want to be able to iterate without side effects, so it's important that the dry mode be as representative as possible for what'll happen when something is run for real. |
| |
| ▲ | AmbroseBierce 6 hours ago | parent [-] | | You understand how subjective that is right? Someone might expect that the database doesn't do the last commit step while other people is perfectly happy that the database engine checks that it has enough writing permissions and is running as a user that can start the process without problems. | | |
| ▲ | xavdid 6 hours ago | parent [-] | | Sure, where you draw the line will vary between projects. As long as its exact placement doesn't matter too much. For me personally, I tend to draw the line at write operations. So in your example, I'd want a dry run to verify the permissions that it can (if I expect those to be a problem). But if that can't easily be done without a write, then maybe it's not worth it. There are also situations where you want a dry run to be really fast, so you forego some checks (allowing for more surprises later). Really just depends. |
|
|
|
| ▲ | lanyard-textile 6 hours ago | parent | prev [-] |
| I'd argue the dry run is a form of integration testing: Essentially the writes are mocked, but the reads are still functional. |