Тесты в пакете foo_test (объявление package foo_test) видят только экспортированные имена пакета foo. Так проверяют публичный API "снаружи", как сторонний код. Внутренние тесты (package foo) видят неэкспортированные символы. External тесты помогают избежать циклических зависимостей.
// foo_test.go
package foo_test
import "mymod/foo"
func TestPublicAPI(t *testing.T) {
r := foo.NewReader() // только экспорт
}