Enviar búsqueda
Cargar
Goの時刻に関するテスト
•
2 recomendaciones
•
3,289 vistas
K
Kentaro Kawano
Seguir
Goの時刻に関するテスト
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 36
Descargar ahora
Descargar para leer sin conexión
Recomendados
日本語テストメソッドについて
日本語テストメソッドについて
kumake
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
Keycloak入門
Keycloak入門
Hiroyuki Wada
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
Recomendados
日本語テストメソッドについて
日本語テストメソッドについて
kumake
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
Keycloak入門
Keycloak入門
Hiroyuki Wada
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
MongoDBの監視
MongoDBの監視
Tetsutaro Watanabe
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんか
Ryuji Tamagawa
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
例外設計における大罪
例外設計における大罪
Takuto Wada
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
外部環境への依存をテストする
外部環境への依存をテストする
Shunsuke Maeda
Unity 2018からのハイパフォーマンスな機能紹介
Unity 2018からのハイパフォーマンスな機能紹介
dena_genom
Más contenido relacionado
La actualidad más candente
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
MongoDBの監視
MongoDBの監視
Tetsutaro Watanabe
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんか
Ryuji Tamagawa
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
例外設計における大罪
例外設計における大罪
Takuto Wada
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
La actualidad más candente
(20)
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
暗号技術の実装と数学
暗号技術の実装と数学
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
MongoDBの監視
MongoDBの監視
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんか
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
例外設計における大罪
例外設計における大罪
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
Similar a Goの時刻に関するテスト
外部環境への依存をテストする
外部環境への依存をテストする
Shunsuke Maeda
Unity 2018からのハイパフォーマンスな機能紹介
Unity 2018からのハイパフォーマンスな機能紹介
dena_genom
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Badoo Development
WEB222-lecture-4.pptx
WEB222-lecture-4.pptx
RohitSharma318779
Java Day-7
Java Day-7
People Strategists
The Ring programming language version 1.10 book - Part 50 of 212
The Ring programming language version 1.10 book - Part 50 of 212
Mahmoud Samir Fayed
Go Concurrency
Go Concurrency
Cloudflare
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
GeeksLab Odessa
OOP Lecture 16-Math,Timer.pptx
OOP Lecture 16-Math,Timer.pptx
Tanzila Kehkashan
Csphtp1 08
Csphtp1 08
HUST
Go Concurrency Patterns
Go Concurrency Patterns
ElifTech
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
NHN FORWARD
Job Queue in Golang
Job Queue in Golang
Bo-Yi Wu
Javascript Everywhere
Javascript Everywhere
Pascal Rettig
What Year Is It: things you shouldn't do with timezones
What Year Is It: things you shouldn't do with timezones
Aram Dulyan
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicox
David Rodenas
Date object.pptx date and object v
Date object.pptx date and object v
22x026
Intro to Clojure's core.async
Intro to Clojure's core.async
Leonardo Borges
ES3-2020-06 Test Driven Development (TDD)
ES3-2020-06 Test Driven Development (TDD)
David Rodenas
Introduction to Apache Spark / PUT 06.2014
Introduction to Apache Spark / PUT 06.2014
bbogacki
Similar a Goの時刻に関するテスト
(20)
外部環境への依存をテストする
外部環境への依存をテストする
Unity 2018からのハイパフォーマンスな機能紹介
Unity 2018からのハイパフォーマンスな機能紹介
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
Доклад Антона Поварова "Go in Badoo" с Golang Meetup
WEB222-lecture-4.pptx
WEB222-lecture-4.pptx
Java Day-7
Java Day-7
The Ring programming language version 1.10 book - Part 50 of 212
The Ring programming language version 1.10 book - Part 50 of 212
Go Concurrency
Go Concurrency
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
OOP Lecture 16-Math,Timer.pptx
OOP Lecture 16-Math,Timer.pptx
Csphtp1 08
Csphtp1 08
Go Concurrency Patterns
Go Concurrency Patterns
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
Job Queue in Golang
Job Queue in Golang
Javascript Everywhere
Javascript Everywhere
What Year Is It: things you shouldn't do with timezones
What Year Is It: things you shouldn't do with timezones
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicox
Date object.pptx date and object v
Date object.pptx date and object v
Intro to Clojure's core.async
Intro to Clojure's core.async
ES3-2020-06 Test Driven Development (TDD)
ES3-2020-06 Test Driven Development (TDD)
Introduction to Apache Spark / PUT 06.2014
Introduction to Apache Spark / PUT 06.2014
Último
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Khushali Kathiriya
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Remote DBA Services
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
apidays
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
Elevate Developer Efficiency & build GenAI Application with Amazon Q
Elevate Developer Efficiency & build GenAI Application with Amazon Q
Bhuvaneswari Subramani
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
Zilliz
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
Dropbox
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
Remote DBA Services
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
johnbeverley2021
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
apidays
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
MIND CTI
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
Rustici Software
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Product Anonymous
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
Nanddeep Nachan
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Orbitshub
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
sudhanshuwaghmare1
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Deepika Singh
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
Último
(20)
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Elevate Developer Efficiency & build GenAI Application with Amazon Q
Elevate Developer Efficiency & build GenAI Application with Amazon Q
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
Goの時刻に関するテスト
1.
Go 2017/07/07 Umeda.go #2
2.
• (@kawaken) • • LINE •
Go 3 • goa
3.
4.
func CanDeliver() bool
{ hour := time.Now().Hour() // 8 20 return 8 <= hour && hour <= 20 } func
5.
• 8 20
: true • 21 7 : false
6.
func TestCanDeliver(t *testing.T)
{ hour := time.Now().Hour() expected := 8 <= hour && hour <= 20 // result := CanDeliver() if expected == result { t.Log("OK") } else { t.Fatal("NG") } }
7.
• time.Now •
8.
• • • • • 2 29
9.
10.
1. 2. 3.
11.
1.
12.
func CanDeliver(hour int)
bool { // 8 20 return 8 <= hour && hour <= 20 } time.Now
13.
func TestCanDeliver(t *testing.T)
{ cases := []struct { hour int want bool }{ {7, false}, {8, true}, {20, true}, {21, false}, } for _, c := range cases { got := CanDeliver(c.hour) if got != c.want { t.Errorf("CanDeliver(%d) => %t, want %t", c.hour, got, c.want) } } }
14.
2.
15.
var now =
time.Now // time.Now now func CanDeliver() bool { hour := now().Hour() // now // 8 20 return 8 <= hour && hour <= 20 } now
16.
func fakeHour(hour int)
{ // time.Time func now now = func() time.Time { return time.Date(2017, 7, 7, hour, 0, 0, 0, time.Local) } } func TestCanDeliver(t *testing.T) { // snip... for _, c := range cases { fakeHour(c.hour) // fakeHour got := CanDeliver() if got != c.want { t.Errorf("hour: %d, CanDeliver() => %t, want %t", c.hour, got, c.want) } } now = time.Now // reset time }
17.
3.
18.
code.cloudfoundry.org/clock • time • • clock/fakeclock/FakeClock
19.
var myClock =
clock.NewClock() // myClock clock.Clock func CanDeliver() bool { hour := myClock.Now().Hour() // myClock // 8 20 return 8 <= hour && hour <= 20 } myClock
20.
func fakeHour(hour int)
{ // FakeClock myClock = fakeclock.NewFakeClock(time.Date(2017, 7, 7, hour, 0, 0, 0, time.Local)) } func TestCanDeliver(t *testing.T) { // snip... for _, c := range cases { fakeHour(c.hour) // fakeHour got := CanDeliver() if got != c.want { t.Errorf("hour: %d, CanDeliver() => %t, want %t", c.hour, got, c.want) } } myClock = clock.NewClock() // reset time }
21.
• • time.Now • • time.Now
22.
time.Now
23.
4.
24.
func CanDeliver(hour int)
bool { // 8 20 return 8 <= hour && hour <= 20 } func CanDeliverNow() bool { hour := time.Now().Hour() return CanDeliver(hour) }
25.
5. Monkey patch
26.
github.com/bouk/monkey • Go • •
27.
func CanDeliver() bool
{ hour := time.Now().Hour() // 8 20 return 8 <= hour && hour <= 20 }
28.
func fakeHour(hour int)
{ // time.Now func monkey.Patch( time.Now, func() time.Time { return time.Date(2017, 7, 7, hour, 0, 0, 0, time.Local) }, ) } func TestCanDeliver(t *testing.T) { // snip... for _, c := range cases { fakeHour(c.hour) // fakeHour got := CanDeliver() if got != c.want { t.Errorf("hour: %d, CanDeliver() => %t, want %t", c.hour, got, c.want) } } monkey.Unpatch(time.Now) // reset time }
29.
6. time
30.
// time.Now func Now()
Time { sec, nsec := now() return Time{sec + unixToInternal, nsec, Local} }
31.
Now
32.
/* src/time/time.go */ var
fakeTime Time // func Fake(t Time) { fakeTime = t } func ResetFake() { fakeTime = Time{} } func Now() Time { if !fakeTime.IsZero() { return fakeTime } sec, nsec := now() return Time{sec + unixToInternal, nsec, Local} }
33.
func CanDeliver() bool
{ hour := time.Now().Hour() // 8 20 return 8 <= hour && hour <= 20 }
34.
func fakeHour(hour int)
{ time.Fake(time.Date(2017, 7, 7, hour, 0, 0, 0, time.Local)) } func TestCanDeliver(t *testing.T) { // snip... for _, c := range cases { fakeHour(c.hour) // fakeHour got := CanDeliver() if got != c.want { t.Errorf("hour: %d, CanDeliver() => %t, want %t", c.hour, got, c.want) } } time.ResetFake() // reset time }
35.
% /usr/local/go1.8.3_faketime/bin/go test
-v ./timepkg === RUN TestCanDeliver --- PASS: TestCanDeliver (0.00s) sample_test.go:22: 2017-07-07 07:00:00 +0900 JST sample_test.go:22: 2017-07-07 08:00:00 +0900 JST sample_test.go:22: 2017-07-07 20:00:00 +0900 JST sample_test.go:22: 2017-07-07 21:00:00 +0900 JST PASS ok github.com/kawaken/golang-time-testing/timepkg 0.466s
36.
1. 2. code.cloudfoundry.org/clock 3. monkey
Descargar ahora