Bench test programu

0

Początkujący w Go, więc niewiele jeszcze wiem. Próbuję napisać prosty bench test dla funkcji. Mam dwa pliki:

package main

func Foo() string{
    return "Bar";
}

func main() {
    Foo()
}
package main

import (
    "testing"
)

func BenchmarkGeeks(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Foo()
    }
}

Odpalam to w ten sposób w roboczym katalogu wewnątrz repo gita:

go test --bench=.

Ponieważ jestem w podkatalogu repozytorium, to odsyła mnie katalog wyżej i zaleca uruchomić go mod init, jednak to niewiele pomaga.

  1. Czy można prosić o wyjaśnienie, czego mi tutaj brakuje?
  2. Skąd funkcja testująca wie o istnieniu Foo skoro jej nie importuje (przykład wziąłem z Internetu)?
  3. Czy można upakować funkcję testującą i wywołującą w jednym pliku?
3
Pyxis napisał(a):
  1. Skąd funkcja testująca wie o istnieniu Foo skoro jej nie importuje (przykład wziąłem z Internetu)?

W obu plikach korzystasz z package main, więc wszystkie funkcje zaczynające się dużą literą są dostępne w obrębie tego samego pakietu.

2

U mnie działa
screenshot-20220922170513.png

  1. W go pliki należące do tego samego pakietu są tak naprawdę sklejone w jeden duży plik wynikowy. Pliki to tylko podział ułatwiający kodowanie
  2. Tak, pliki _test mają dostęp do wszystkiego ale nie w drugą stronę. Możesz wrzucic kod do testu, ale zazwyczaj to nie ma sensu, bo przecież chcesz tego kodu używać na produkcji. Wyjątkiem są testy wydajnościowe ad-hoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1